Identity Server 4范围验证错误

时间:2018-12-01 20:20:56

标签: c# asp.net-core jwt identityserver4 scopes

作为迁移项目的一部分,我正尝试使用.Net Core / ApiServer替换基于遗留的基于自定义构建jwt的身份验证api。理想情况下,我们的新解决方案产生的jwt令牌应该与旧版产生的jwt令牌非常匹配;包括范围的使用。例如旧版:

{
  "iss": "http://example.com",
  "sub": "api@example",
  "unique_name": "test@api",
  "given_name": "api user",
  "scope": [
    "GET api/balance/{date}",
    "GET api/whoami",
    ...
],
  "role": "12,0,11",
  "client-scope": "test_client",
  "user-scope": [
    "Support",...
  ],
  "aud": "test_client",
  "exp": 1543376516,
  "nbf": 1543376216
}   

我们的新解决方案几乎可以正常工作-范围(API动词和端点)除外。我用来设置这些的方法是:

首先在startup.cs中添加支持:

        IdentityServerBuilderExtensionsCrypto
            .AddSigningCredential(services.AddIdentityServer(options =>
            {
                options.IssuerUri = Configuration["Jwt:Issuer"];         

            }), signingKey)
            .AddInMemoryApiResources(InMemoryConfiguration.ApiResources().Result)
            .AddInMemoryClients(InMemoryConfiguration.Clients().Result);

将ApiRepources数组设置为URL端点列表

 var resources = new List<ApiResource> {
    new ApiResource("api/balance/{date}"), new ApiResource("api/whoami"), ... 
 };

将这些设置为客户端范围

AllowedScopes = ["api/balance/{date}", "api/whoami", ...etc]

提交请求时,我收到invalid_scope错误,并在日志中报告以下内容:

  

2018-12-02 08:37:24.8874 IdentityServer4.Validation.ScopeValidator不允许请求的范围:api / holdings / {date}

似乎GET动词已被截断以进行检查?我已经能够获得删除GET(或其他动词)前缀的基本示例,但是不幸的是,我们可能仍需要使用它来支持现有的应用程序。

有人能够帮助建议我们如何使它工作吗?

0 个答案:

没有答案