我正在开展涉及OpenID Connect和WSO2 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
声明值相同 发行人
所以,我的问题如下:
OIDCDiscoveryEPUrl
文件中指定IDTokenIssuerID
和identity.xml
的各种组合,但到目前为止还没有运气。目前,在阅读oic
源代码后,我使用以下解决方法忽略了发卡行不匹配:
oic_client.allow["issuer_mismatch"] = True
但是,我更愿意找到一个解决方案,让WSO2 Identity Server按照规范行事。
答案 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规范的发现网址。