繁体   English   中英

WSO2身份服务器JWT承载

[英]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下找到它)

因此,有两种方法可以解决此问题,

  1. 更改Identity Server的颁发者值,以便它可以获取其居民身份提供者的证书。

    为此,请登录管理控制台,

转到身份提供者->居民->入站身份验证配置-> OAuth2 / OpenID Connect配置->将“身份提供者实体ID”值设置为LOCAL

  1. 创建一个名称与OpenID连接令牌的发行者值相等的新的身份提供程序(即令牌端点),并上载可用于验证OpenID连接令牌的公共证书。

就个人而言,我更喜欢第一个解决方案:)

更新:

您还需要再进行一次更改,

在identity.xml(位于repository / conf / identity下)中,取消注释以下行

<Audiences> 
    <Audience>
        ${carbon.protocol}://${carbon.host}:${carbon.manag‌​ement.port}/oauth2/t‌​oken
    </Audience> 
</Audiences>

这将确保在用作JWT承载授权时,将针对发出的OpenID连接令牌通过观众验证检查。 (即,JWT授权处理程序将验证令牌端点是否是所提供授权中的受众之一)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM