我有一个Windows服务(没有用户交互),它使调用受保护的服务(例如,调用REST / WEB API)。我尝试使用Client Credentials Flow,但看起来IdentityServer3不了解Client Credentials流。主题值(应该包含ClaimsPrincipal对象)为null。知道这里有什么问题吗? IdentityServer3是否支持客户端凭据流?在IdentityServer3中使用Client Credentials流的正确方法是什么?
以下是我的客户端代码,它最终从IdentityServer3获取内部服务器错误的响应:
Debug.Print Join$(Array(1, 2, 3), ".") 'Prints 1.2.3
答案 0 :(得分:1)
IdentityServer 3支持客户端凭据OAuth授权类型(请参阅Flow property on the Client class)。
错误将是一个配置问题,因此打开logging for IdentityServer,它会告诉您请求失败的原因。
要获取可代表用户访问受保护资源的访问令牌,必须使用具有用户/身份知识的授权类型/流。
客户端凭据仅用于机器到机器的通信,它没有用户/身份的概念。
理想情况下,如果用户已通过身份验证(他们登录到系统),则可以在登录时向他们发出访问令牌。这可以使用任何OpenID Connect流程(隐式,授权代码或混合)完成。
如果未对用户进行身份验证,则可以使用“资源所有者”流。此流程通常被认为是遗留的,需要用户的用户名和密码。