发行人与WSO2 Identity Server上的OpenID Connect发现不匹配

时间:2017-02-06 05:24:51

标签: python wso2is openid-connect

我正在开展涉及OpenID ConnectWSO2 Identity Server 5.3.0的小概念验证实施。

在客户端,我使用python和oic库来尝试使发现机制正常工作。我根据oic documentation

执行以下代码
from oic.oic import Client

oic_client = Client(verify_ssl=False)

uid = "admin@172.22.0.2"
issuer = oic_client.discover(uid)
provider_info = oic_client.provider_config(issuer)

这会导致以下错误:

  

oic.exception.IssuerMismatch:   ' https://172.22.0.2:443/oauth2/oidcdiscovery' !=   ' https://172.22.0.2:443/oauth2/token'

此处的问题是,使用默认配置时,discover()步骤将返回issuer https://172.22.0.2:443/oauth2/oidcdiscovery的值,但随后的provider_config()步骤将返回包含发行人价值https://172.22.0.2:443/oauth2/token

oic库在将此不匹配报告为错误时似乎是正确的,因为OpenID Connect Discovery specification声明了以下关于提供程序元数据中提供的issuer值(强调我的):

  

必需的。使用https方案的URL,没有查询或   OP断言的片段组件作为其颁发者标识符。如果   支持发行者发现(参见第2节),此值必须是   与WebFinger返回的发行者值相同。这也必须   与此签发的ID令牌中的iss声明值相同   发行人

所以,我的问题如下:

  1. 我是否正确得出结论(至少使用默认配置)WSO2 Identity Server的行为不符合OpenID Connect规范,至少就发现而言?
  2. 是否可以以符合规范的方式配置WSO2 Identity Server?我已尝试在OIDCDiscoveryEPUrl文件中指定IDTokenIssuerIDidentity.xml的各种组合,但到目前为止还没有运气。
  3. 目前,在阅读oic源代码后,我使用以下解决方法忽略了发卡行不匹配:

    oic_client.allow["issuer_mismatch"] = True
    

    但是,我更愿意找到一个解决方案,让WSO2 Identity Server按照规范行事。

2 个答案:

答案 0 :(得分:1)

我观察到以下问题,并且能够通过更改位于WSO2-IS管理控制台->身份提供商->居民->入站身份验证配置->中的居民身份提供商实体ID 来解决OAuth2 / OpenID Connect配置。检查主机名和端口,并根据IDP配置进行更改。

此解决了

错误-实用程序发行者不匹配,
预期的https:// localhost:9444 / oauth2 / token
得到了https:// localhost:9443 / oauth2 / token

答案 1 :(得分:0)

我通过将identity.xml的IDTokenIssuerID设置为发现网址(https://172.22.0.2:443/oauth2/oidcdiscovery与您的一样)来解决这个问题。但最终在idtoken的iss字段中遇到了另一个不匹配的地方,它始终是“https://localhost:9443/oauth2/token”,并且有望成为OIDC规范的发现网址。