如何在IdentityServer4上的TestController上启用[授权],以便声明CRUD控制器

如何在IdentityServer4上的TestController上启用[授权],以便声明CRUD控制器,identityserver4,Identityserver4,使用来自的OIDC客户端。 和的演示服务器 我在IdentityServer本身上有以下控制器: [Route("api/Test")] //[Authorize] [Authorize(ActiveAuthenticationSchemes = "Bearer")] public class TestController : ControllerBase { public IActionResult Get() { var claims = User.Claim

使用来自的OIDC客户端。 和的演示服务器

我在IdentityServer本身上有以下控制器:

[Route("api/Test")]
//[Authorize]
[Authorize(ActiveAuthenticationSchemes = "Bearer")]
public class TestController : ControllerBase
{
    public IActionResult Get()
    {
        var claims = User.Claims.Select(c => new { c.Type, c.Value });
        return new JsonResult(claims);
    }
}
如果我注释掉这两个
[Authorize]
属性,我将到达TestController

如果仅使用
[Authorize]
,则会出现以下错误:

获取仪表板:1 XMLHttpRequest无法 负载没有“访问控制允许来源” 请求的资源上存在标头。起源 因此不允许访问“”。反应 有HTTP状态代码500

如果我只使用
[Authorize(ActiveAuthenticationSchemes=“Bearer”)]
我会得到:

获取仪表板:1 XMLHttpRequest无法 负载没有“访问控制允许来源” 请求的资源上存在标头。起源 因此不允许访问“”。反应 有HTTP状态代码500。仪表板:无法加载1 XMLHttpRequest . 重定向自 ”“到 ”“是的 被CORS策略阻止:请求需要飞行前,即 不允许跟随跨原点重定向

我用于从OIDC客户端调用端点的代码是:

  test() {
   this.authService.mgr.getUser()
     .then(user => {
      //  this.http.get('https://api.identityserver.io/identity', 
      this.http.get('http://localhost:5000/api/Test', 
       { headers: new Headers({ 'Authorization': `${user.token_type} ${user.access_token}`}) })
         .subscribe(res => {
           console.log(res.json());
         });
     });
 }
我能用这个成功地打电话

这是我的警察助手:

public class DemoCorsPolicy : ICorsPolicyService
{
    public Task<bool> IsOriginAllowedAsync(string origin)
    {
        return Task.FromResult(true);
    }
}
公共类民主政治:ICorsPolicyService
{
公共任务IsOriginAllowedAsync(字符串源)
{
返回Task.FromResult(true);
}
}
这就是所谓的表单启动:

 public void ConfigureServices(IServiceCollection services)
        {
...
            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<AuthDbContext>()
                .AddDefaultTokenProviders();

            services.AddMvc();
...
            services.AddIdentityServer()
                .AddTemporarySigningCredential()
                .AddInMemoryPersistedGrants()
                .AddInMemoryIdentityResources(Resources.GetIdentityResources())
                .AddInMemoryApiResources(Resources.GetApiResources())
                .AddInMemoryClients(Clients.GetClients())
                .AddAspNetIdentity<ApplicationUser>();

            services.AddTransient<ICorsPolicyService, DemoCorsPolicy>();
        }
public void配置服务(IServiceCollection服务)
{
...
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.AddMvc();
...
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryStedGrants()
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddInMemoryClients(Clients.GetClients())
.addAsNetIdentity();
services.AddTransient();
}

最终目标是对权限/声明执行CRUD操作。我目前正忙于这个看似琐碎的任务,即拥有一个受授权保护的控制器:/

最终,由于我能够在IdentityServer 4外部成功地使用
[Authorize]
,我决定将授权与身份验证分离,并创建一个授权服务器,以分离关注点