Asp.net core mvc ASP.Net核心:声明转换和授权策略
请先看看这个网址 当调用消息操作时,asp.net mvc系统将如何理解用户的国籍……是巴基斯坦人还是印度人?Asp.net core mvc ASP.Net核心:声明转换和授权策略,asp.net-core-mvc,Asp.net Core Mvc,请先看看这个网址 当调用消息操作时,asp.net mvc系统将如何理解用户的国籍……是巴基斯坦人还是印度人? 指导我它是如何工作的。谢谢除了您问题中的上述两段代码之外,您还需要在Startup.cs中向授权服务添加策略 例如 public class Startup { public void ConfigureServices(IServiceCollection services) { ... services.AddAuthorizat
指导我它是如何工作的。谢谢除了您问题中的上述两段代码之外,您还需要在
Startup.cs
中向授权服务添加策略
例如
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthorization(options =>
{
options.AddPolicy("MustBePakistani", policy =>
policy.RequireClaim("Nationality", "Pakistan"));
});
services.AddSingleton<IClaimsTransformation, ClaimsTransformer>();
...
}
private class ClaimsTransformer : IClaimsTransformation
{
// Can consume services from DI as needed, including scoped DbContexts
public ClaimsTransformer(IHttpContextAccessor httpAccessor)
{
}
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
if (principal.Identity.IsAuthenticated)
{
// get this from cache or db
var country = "Pakistan";
(principal.Identity as ClaimsIdentity)
.AddClaim(new Claim("Nationality", country));
}
return Task.FromResult(principal);
}
}
}
公共类启动
{
public void配置服务(IServiceCollection服务)
{
...
services.AddAuthorization(选项=>
{
options.AddPolicy(“mustbepakistan”,policy=>
政策要求(“国籍”、“巴基斯坦”);
});
services.AddSingleton();
...
}
私有类ClaimsTransformer:IClaimsTransformation
{
//可以根据需要使用DI中的服务,包括作用域DBContext
公共请求传输格式(IHttpContextAccessor httpAccessor)
{
}
公共任务TransformAsync(ClaimsPrincipal主体)
{
if(主体身份验证)
{
//从缓存或数据库中获取此信息
var country=“巴基斯坦”;
(委托人身份作为索赔实体)
.AddClaim(新的索赔(“国籍”,国家));
}
返回任务.FromResult(主体);
}
}
}
请告诉我在哪里可以调用MyClaimsTransformer()的最佳位置?
[Authorize(Policy = "MustBePakistani")]
public IActionResult Message()
{
return Content("Hi Pakistani");
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthorization(options =>
{
options.AddPolicy("MustBePakistani", policy =>
policy.RequireClaim("Nationality", "Pakistan"));
});
services.AddSingleton<IClaimsTransformation, ClaimsTransformer>();
...
}
private class ClaimsTransformer : IClaimsTransformation
{
// Can consume services from DI as needed, including scoped DbContexts
public ClaimsTransformer(IHttpContextAccessor httpAccessor)
{
}
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
if (principal.Identity.IsAuthenticated)
{
// get this from cache or db
var country = "Pakistan";
(principal.Identity as ClaimsIdentity)
.AddClaim(new Claim("Nationality", country));
}
return Task.FromResult(principal);
}
}
}