我对Identity Server的研究很早,但我已经完成了一些教程,并且觉得我已经超过了第一个障碍。我从Identity Server的Getting Started guide开始,然后转到Scott Brady的优秀的3部分教程starting here,该教程演示了如何使用混合客户端设置身份服务器以进行OIC身份验证。
因此,我现在有两个工作的例子。一个使用Flows.ClientCredentials
和AccessTokenType.Reference
通过IdentityModel.Client.TokenClient
的客户端的ID和秘密来获取用于验证API调用的承载令牌(根据IS3的第一个入门示例)。另一个使用Flows.Hybrid
和AccessTokenType.Jwt
的客户端为MVC Web应用程序执行Open ID身份验证(根据Scott Brady系列中的第3个)。
我正在努力提供一个身份服务器,让第三方编写可以获取承载令牌的应用程序,以便客户授权调用我的API调用,但也允许其自己的用户使用Open ID进行身份验证我的身份服务器。我目前的设置方式,我需要发布这些第三方的2套客户端凭证(ID和机密),以允许他们执行这些单独的功能。
这是正确的方法吗?我天真的假设是,这是混合流客户端的目的。但是,如果我使用我的混合客户端的凭据调用上面的示例代码(使用TokenClient
的代码),则返回的错误是“unauthorized_client”,并且Identity Server日志告诉我“客户端未授权客户端凭据流”。
以下是我的2个客户的定义方式:
new Client {
ClientId = @"cc-client",
ClientName = @"Example Client Credentials Client",
ClientSecrets = new List<Secret> {
new Secret("idsrv3test".Sha256())
},
Enabled = true,
Flow = Flows.ClientCredentials,
AllowedScopes = new List<string> {
Scopes.SCOPE_CLIENT_STANDARD
},
AccessTokenType = AccessTokenType.Reference
},
// Testing with a hybrid client here which will log in via our Identity Server
// https://www.scottbrady91.com/Identity-Server/Identity-Server-3-Standalone-Implementation-Part-3
new Client {
ClientId = @"hybridclient",
ClientName = @"Example Hybrid Client",
ClientSecrets = new List<Secret> {
new Secret("idsrv3test".Sha256())
},
Enabled = true,
Flow = Flows.Hybrid,
RequireConsent = true,
AllowRememberConsent = true,
RedirectUris = new List<string> {
"https://3p-client2.not-domain.local/"
},
PostLogoutRedirectUris = new List<string> {
"https://3p-client2.not-domain.local/"
},
AllowedScopes = new List<string> {
Constants.StandardScopes.OpenId,
Constants.StandardScopes.Profile,
Constants.StandardScopes.Email,
Constants.StandardScopes.Roles,
Constants.StandardScopes.OfflineAccess
},
AccessTokenType = AccessTokenType.Jwt
}
如果有人能在这里澄清我的理解,那就太好了。感谢。