Identity Server:令牌类型jwt与使用OIDC

时间:2016-10-06 20:46:18

标签: angular jwt thinktecture-ident-server identityserver4 oidc

我正在关注damienbod Ang2 Id Serv 4 OIDC提供的示例,其中包含以下内容:身份服务器(已修改的实现),资源API和ng-2应用程序。

从身份服务器进行身份验证并尝试访问受保护的API后,它总是给我错误401(未经授权)。

我已经更改了身份服务器上的客户端以使用jwt的令牌类型而不是引用,然后它就可以工作。

身份服务器上的客户端配置:

                ClientName = "angular2client",
                ClientId = "angular2client",
                AccessTokenType = AccessTokenType.Jwt,               
                AllowedGrantTypes = GrantTypes.Implicit,
                AllowAccessTokensViaBrowser = true,
                //redirect urls are ommited
                AllowedScopes = new List<string>
                {
                   "openid",
                   "resourceAPIs",
                    "role",
                }

资源API :身份验证

 app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = "http://localhost:44311",
            ScopeName = "resourceAPIs",

            RequireHttpsMetadata = false
        });

我需要知道,为什么jwt令牌类型使其工作以及要修改哪些代码以使引用类型令牌起作用?

1 个答案:

答案 0 :(得分:2)

要使用参考令牌,您需要提供范围密码。见docs

  

内省端点需要使用范围进行身份验证   秘密。

Identity Server:

            ClientName = "angular2client",
            ClientId = "angular2client",
            ClientSecrets = new List<Secret>
            {
                new Secret("secret".Sha256())
            },
            AccessTokenType = AccessTokenType.Jwt,               
            AllowedGrantTypes = GrantTypes.Implicit,
            AllowAccessTokensViaBrowser = true,
            //redirect urls are ommited
            AllowedScopes = new List<string>
            {
               "openid",
               "resourceAPIs",
                "role",
            }

资源服务器

    app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
    {
        Authority = "http://localhost:44311",
        ScopeName = "resourceAPIs",
        ScopeSecret = "secret",
        RequireHttpsMetadata = false
    });