在使用普通嵌入式登录实现Auth0身份验证/授权时,我可以对用户进行身份验证并获取有效的 accessToken / idToken 。
初始化
webAuth = new auth0.WebAuth({
domain: 'xxx.auth0.com',
clientID: 'myclientid',
responseType: 'token id_token'
});
成功获取令牌。
webAuth.client.login({
realm: _Connection,
username: 'aaa@b.com',
password: 'password',
audience: 'https://xxx.auth0.com/api/v2/',
scope: 'openid profile email'
}, function (err, args) {
if (!err)
{
webAuth.client.userInfo(token, function (args, authUserData) {
var ajaxAdapter = breeze.config.getAdapterInstance("ajax");
***Setting bearer token to Global level.**
ajaxAdapter.defaultSettings = {
headers: ({ "Authorization": "Bearer " + token })
};
myAPICall(args.email).then({}).fail({});
});
}
});
使用OWIN验证RS256签名JWT的服务器代码。
private void ConfigureAuthZero(IAppBuilder app)
{
var issuer = $"https://{ConfigurationManager.AppSettings["Auth0:Domain"]}/";
var audience = ConfigurationManager.AppSettings["Auth0:ClientID"];
var apiIdentifier = ConfigurationManager.AppSettings["Auth0:ApiIdentifier"];
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
string certificatePath = HostingEnvironment.MapPath("~/mycertificate.cer");
var certificate = new X509Certificate2(certificatePath);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudience = audience,
ValidIssuer = issuer,
IssuerSigningKeyResolver = (token, securityToken, identifier, parameters) => new X509SecurityKey(certificate)
}
});
}
我的问题:
上述服务器代码不会授权用户。
但是,如果我将ValidAudience = "https://xxx.auth0.com/api/v2/"
设置为Auth0 API标识符,则API方法会成功授权(状态200)用户。
但这次它不会使用 ClaimTypes.Email
给予 ClaimsIdentity.Claims我在这里缺少什么?
答案 0 :(得分:0)
我的错误:
(User.Identity as ClaimsIdentity)?.Claims.FirstOrDefault(c => c.Type == "you-have-set-this-rule-in-auth0")?.Value;
只是加载项,Link在实现Auth0时值得一读。 Auth0提供了一个很好的nuget包 Auth0.OpenIdConnectSigningKeyResolver ,它在上面提供的链接中有很好的用途。