[英]WSO2 Identity Server JWT Bearer
我已按照本指南在WSO2 IS 5.3.0中安装并配置了JWT授权类型,然后配置了启用OAuth / OpenID Connect入站身份验证器的服务提供程序。 我能够从javascript客户端使用开放身份范围的Oauth 2协议对用户进行身份验证,以获取有效的JWT令牌(JWTToken)。
最后,我尝试使用REST客户端并设置Content-Type来向POST请求https:// **** / oauth2 / token?grant_type = urn:ietf:params:oauth:grant-type:jwt-bearer&assertion = JWTToken发出POST请求=应用程序/ x-www-form-urlencoded。
当我执行此请求时,WSOIS服务器会要求输入用户名和密码。 我可以通过此步骤,提供有效的clientId和clientSecret。
不幸的是,此时服务器不使用访问令牌进行响应,而是使用400错误的请求进行响应,并且在响应正文中写道:“ {{error_description”:“在对租户域carbon.super的身份提供者默认公共证书进行解码时出错”, “错误”:“ invalid_grant”}“
我不知道问题出在我传递给服务器的JWT令牌还是证书存在问题。 有什么帮助吗?
好的。 我认为这应该对您有帮助。
如果您使用从WSO2 Identity Server获得的OpenID连接令牌并将其放在jwt.io中 ,则会看到openID连接的“ iss”(发布者)值为“ https:// localhost:9443 / oauth2 / token “(如果已设置主机名,请将localhost替换为您的主机名),它是WSO2 Identity Server的令牌终结点。
因此,当您将此令牌用作JWT承载授权时,为了验证签名,授权处理程序将尝试使用issuer(iss)字段(即WSO2 Identity Server的令牌终结点)中给定的名称检索IDP。 由于无法找到任何身份提供者,因此它将检索没有任何证书的默认身份提供者(请注意,这是为了向后兼容而添加的虚拟IDP)。 (您可以在$ IS_HOME / repository / conf / identity / identity-providers / default.xml下找到它)
因此,有两种方法可以解决此问题,
更改Identity Server的颁发者值,以便它可以获取其居民身份提供者的证书。
为此,请登录管理控制台,
转到身份提供者->居民->入站身份验证配置-> OAuth2 / OpenID Connect配置->将“身份提供者实体ID”值设置为LOCAL
就个人而言,我更喜欢第一个解决方案:)
更新:
您还需要再进行一次更改,
在identity.xml(位于repository / conf / identity下)中,取消注释以下行
<Audiences>
<Audience>
${carbon.protocol}://${carbon.host}:${carbon.management.port}/oauth2/token
</Audience>
</Audiences>
这将确保在用作JWT承载授权时,将针对发出的OpenID连接令牌通过观众验证检查。 (即,JWT授权处理程序将验证令牌端点是否是所提供授权中的受众之一)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.