Asp.net core mvc ASP.Net核心:声明转换和授权策略

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

请先看看这个网址

当调用消息操作时,asp.net mvc系统将如何理解用户的国籍……是巴基斯坦人还是印度人?


指导我它是如何工作的。谢谢

除了您问题中的上述两段代码之外,您还需要在
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);
      }
   }
}