我需要通过使用JWT签署用户ID来获取令牌:
var token = jwt.sign(accounts[request.headers.login].id, privateKey, {expiresIn: 60});
Run Code Online (Sandbox Code Playgroud)
哪里id和privateKey是字符串.
错误是Error: Uncaught error: "expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60.如果我删除选项对象,它可以工作,但没有我需要设置的选项.
问题似乎很简单,但我不知道如何解决它,我做错了什么?
我有需要Azure AD承载身份验证的API.
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
// ...
});
}
Run Code Online (Sandbox Code Playgroud)
然后可以查询Azure AD - 可能使用图谱API - 来确定主叫用户的组信息吗?这里的最终目标是将基于角色的安全性应用于API方法/控制器,如下所示(或类似).
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
Run Code Online (Sandbox Code Playgroud)
此外,身份信息如何以及在何处应用于执行线程?
c# azure-acs azure-active-directory bearer-token json-web-token
我从WSOAM生成JWT令牌,然后作为标头传递给API.我在nodejs中创建了我的API,我使用jsonwebtoken插件来验证和解码JWT.
我无法找到Wso2carbon的RSA公钥来验证/解码令牌.
请帮助我如何生成RSA公钥或在哪里可以找到此密钥?
我的服务器有一个注册 api,在注册后提供令牌,以及一个验证用户令牌的中间件。我需要注册一个帐户才能获取令牌才能对我的服务器执行其他操作。但是,中间件阻止了我的网络请求,因为我还没有令牌。
那么在这种情况下我该如何创建我的帐户和令牌呢?通过一些技巧来绕过中间件?
中间件:
// Middleware to verify token, it will be called everytime a request is sent to API
api.use((req, res, next)=> {
var token = req.headers.token
if (token) {
jwt.verify(token, secret, (err, decoded)=> {
if (err) {
res.status(403).send({ success: false, message: "Failed to authenticate user." })
} else {
req.decoded = decoded
next()
}
})
} else {
res.status(403).send({ success: false, message: "No Token Provided." })
}
})
Run Code Online (Sandbox Code Playgroud)
登入:
// Sign In with email API
api.post('/signInWithEmail', (req, res)=> …Run Code Online (Sandbox Code Playgroud) 根据文档,https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback,jwt.verify将返回解码有效负载,我运行简单的脚本:
var token = jwt.sign({email: req.body.email,}, 's3cr3t');
var decoded = jwt.verify(token, 's3cr3t');
console.log(decoded)
Run Code Online (Sandbox Code Playgroud)
但它只输出如下: { iat: 1470725598 }
我希望输出应该是这样的 {email: myemail@domain.com,}
有什么我想念的吗?
我正在尝试验证jwt使用该RS256算法的情况.使用hs256算法时一切正常
let opts = {
audience: 'y',
issuer: `https://x.auth0.com/`,
algorithms: ["RS256"]
}
jwt.verify(payload.token, 'secret', opts, (err, decoded) => {
if (err) {
console.log("invalid token in iamonline service " + err.message);
return;
}
Run Code Online (Sandbox Code Playgroud)
我一直收到错误: PEM_read_bio_PUBKEY failed
虽然auth0有文件要这样做,但它假设你使用的是快递,我不是.我在websocket上这样做,所以没有中间件.
恼人的一点HS256对我来说没问题,但auth0自定义登录表单似乎需要RS256.
对于客户端项目,我正在开发一个使用 Flask 作为后端的 Web 应用程序。
所以我决定使用 Flask-oauthlib 来尝试使提供刷新令牌和撤销访问令牌变得简单。然而,有些事情我仍然很难理解。
编写 oauth 服务器时,如何使用默认访问/刷新令牌生成和提供 JSON Web 令牌?
我还想知道的另一件事是我将如何从 http 请求验证 JSON Web 令牌?
任何建议表示赞赏。
我正在使用Node Express构建后端服务器。另外,身份验证是我的应用程序使用Passport-SAML进行的操作。我正在使用JWT维护用户会话。所以流程是
回调POST端点也具有页面重定向。到目前为止,由于明显的原因,我知道的是res.status和res.redirect不能在同一端点中。我一直在尝试找到正确的方法,非常感谢您的帮助。
router.route('/login')
.get(
passport.authenticate(config.passport.strategy,
{
successRedirect: '/',
failureRedirect: '/login'
})
);
router.route(config.passport.saml.path)
.post(
passport.authenticate(config.passport.strategy,
{
failureRedirect: '/',
failureFlash: true
}),
function (req, res) {
res.redirect('/');
var token = Verify.getToken(req.user.saml);
return res.status(200).json({
status: 'Login successful!',
success: true,
token: token
});
console.log(token,'yes');
}
);
Run Code Online (Sandbox Code Playgroud) 我正在尝试编译一个打字稿文件,它不断从编译器中抛出这个错误:
error TS2339: Property 'payload' does not exist on type 'string | object'.
Property 'payload' does not exist on type 'string'.
有问题的代码:
decode(token: string): any {
const decodedJWT = jwt.decode(token, { complete: true });
const issuer = decodedJWT.payload.iss;
^^^^^^^^^
return {};
}
Run Code Online (Sandbox Code Playgroud)
我正在使用@types/jsonwebtoken库来定义类型。任何帮助将非常感激。
我正在使用 NodeJs 学习 JWT。我一直坚持在标头中传递 JWT,实际上我不知道该怎么做。
索引.js 文件
var express = require('express'),
app = express(),
routes = require('./routes'),
bodyParser = require('body-parser'),
path = require('path'),
ejs = require('ejs'),
jwt = require('jsonwebtoken');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.post('/home',routes.loginUser);
app.get('/', function(req, res) {
res.render('index');
});
app.get('/home',function(req, res) {
jwt.verify(req.token, 'qwertyu6456asdfghj', function(err, data) {
if (err) {
res.sendStatus(403);
}
});
});
app.listen(3000,function(){
console.log("Server running at Port 3000");
});
Run Code Online (Sandbox Code Playgroud)
路线/index.js 文件
var jwt = require('jsonwebtoken');
exports.home = function(req, res){ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用node.js中的jsonwebtoken验证jose4j生成的json Web令牌,我看到以下错误:
[错误:PEM_read_bio_PUBKEY失败]
jose4j代码基本上直接取自示例:
RsaJsonWebKey key = RsaJwkGenerator.generateJwk(2048);
key.setKeyId("global.authenticated");
byte[] raw = key.getKey().getEncoded();
Base64.Encoder encoder = Base64.getEncoder();
System.out.printf("Public Key [%s]\n", encoder.encodeToString(raw));
JwtClaims claims = new JwtClaims();
claims.setIssuer("global.gen");
claims.setAudience("global.cons");
claims.setExpirationTimeMinutesInTheFuture(12 * 60);
claims.setGeneratedJwtId();
claims.setIssuedAtToNow();
claims.setNotBeforeMinutesInThePast(2);
claims.setSubject("nim");
claims.setClaim("role", "tester");
JsonWebSignature jws = new JsonWebSignature();
jws.setPayload(claims.toJson());
jws.setKey(key.getPrivateKey());
jws.setKeyIdHeaderValue(key.getKeyId());
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
String token = jws.getCompactSerialization();
System.out.printf("Generated Token [%s]\n", token);
JwtConsumer jwtConsumer = new JwtConsumerBuilder()
.setRequireExpirationTime() // the JWT must have an expiration time
.setAllowedClockSkewInSeconds(30) // allow some leeway in validating time based claims to account …Run Code Online (Sandbox Code Playgroud) 我知道这个问题并不是什么新鲜事,可能已经在互联网上进行了讨论.
我是新手,但经过一些研究,我同意这是安全的,因为匿名可以嗅到令牌,但无法在其上附加任何内容.我打算将JWT存储在HTML5Storage中,并对有效负载进行解码以获取一些敏感信息:DisplayName,email_address和role_info等.
这是我的问题,匿名嗅闻我的JWT令牌并代表我行事?如果可能,我该如何避免?
如果我声明一个变量并从一个方法赋值并在该方法外打印,但是它显示未定义。我的代码是
var value;
var getValue = function getValue(){
value = 5;
};
console.log(value);
Run Code Online (Sandbox Code Playgroud)
输出,
undefined
Run Code Online (Sandbox Code Playgroud)
我也在尝试全局变量
var getValue = function getValue(){
global.value = 5;
};
console.log(value);
Run Code Online (Sandbox Code Playgroud)
但显示出一些错误,
console.log(value);
^
ReferenceError: value is not defined
at Object.<anonymous> (~/MyApp/test.js:8:13)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:146:18)
at node.js:404:3
Run Code Online (Sandbox Code Playgroud) json-web-token ×13
node.js ×7
express ×3
javascript ×3
jwt ×3
express-jwt ×2
auth0 ×1
azure-acs ×1
bearer-token ×1
c# ×1
flask ×1
httprequest ×1
java ×1
jose4j ×1
local ×1
oauth-2.0 ×1
passport.js ×1
python-3.x ×1
token ×1
typescript ×1
web-storage ×1
wso2 ×1
wso2carbon ×1