我正在关注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令牌类型使其工作以及要修改哪些代码以使引用类型令牌起作用?
答案 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
});