【发布时间】:2017-06-22 23:38:07
【问题描述】:
我正在做一个涉及OpenID Connect 和WSO2 Identity Server 5.3.0 的小型概念验证实现。
在客户端,我使用带有oic 库的python 来尝试使发现机制工作。我正在执行以下代码,基于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声明值相同 发行人。
所以,我的问题如下:
- 我的结论是否正确(至少在默认配置下)WSO2 Identity Server 的行为不符合 OpenID Connect 规范,至少就发现而言?
- 是否可以以符合规范的方式配置 WSO2 身份服务器?我尝试在
identity.xml文件中指定OIDCDiscoveryEPUrl和IDTokenIssuerID的各种组合,但到目前为止还没有成功。
目前,在阅读了oic 源代码后,我正在使用以下解决方法来忽略颁发者不匹配:
oic_client.allow["issuer_mismatch"] = True
不过,我更愿意找到一种解决方案,让 WSO2 身份服务器按照规范运行。
【问题讨论】:
标签: python wso2is openid-connect