Nir*_*jan 2 authorization claims-based-identity jwt azure-active-directory asp.net-core
您好,我正在 .Net core 中开发 Web 应用程序。我已经实现了 V2 身份验证。现在我需要添加授权。该要求指出,首先,
收集用户的声明不应该是应用程序的工作,它们应该在用户 JWT 中可用。其次,将根据声明授予申请许可。
下面是我的验证码。
services
.AddAuthentication(o =>
{
o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.Authority = azureActiveDirectoryOptions.Authority;
o.TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new List<string>
{
azureActiveDirectoryOptions.AppIdUri,
azureActiveDirectoryOptions.ClientId
},
};
});
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我添加基于声明的授权吗?任何帮助将不胜感激。谢谢
您可以使用如下代码在 JWT 令牌中添加自定义声明。
public string createToken()
{
var tokenHandler = new JwtSecurityTokenHandler();
//create a identity and add claims to the user which we want to log in
ClaimsIdentity claimsIdentity = new ClaimsIdentity(new[]
{
new Claim("UserName", "joey"),
new Claim("Email","xxx@test.com")
});
const string sec = "yoursecurityKey";
var now = DateTime.UtcNow;
var securityKey = new SymmetricSecurityKey(System.Text.Encoding.Default.GetBytes(sec));
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
//create the jwt
var jwtSecurityToken = handler.CreateJwtSecurityToken(
"issuer",
"Audience",
new ClaimsIdentity(claimsIdentity),
DateTime.Now,
DateTime.Now.AddHours(1),
DateTime.Now,
signingCredentials);
var tokenString = tokenHandler.WriteToken(token);
return tokenString;
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,您可以参考这篇文章。
更新:
如果是这样,您可以使用JwtBearerEvents添加声明。
.AddJwtBearer(o =>
{
//Additional config snipped
o.Events = new JwtBearerEvents
{
OnTokenValidated = async ctx =>
{
//Get the calling app client id that came from the token produced by Azure AD
string clientId = ctx.Principal.FindFirstValue("appid");
var claims = new List<Claim>
{
new Claim("UserName", "joey")
};
var appIdentity = new ClaimsIdentity(claims);
ctx.Principal.AddIdentity(appIdentity);
}
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8810 次 |
| 最近记录: |