我计划开发一个支持OpenID Connect作为依赖方的Web应用程序,以便应用程序的用户可以使用他选择的身份提供程序进行注册和登录。 (这与每个Stack Exchange站点上使用的#14; My Logins"相同。)该应用程序可供服务器运营商下载和安装,就像WordPress,phpBB和MediaWiki软件一样可用。服务器运营商应该手动注册哪些OpenID Connect提供商?
当OpenID 2.0是最常见的协议版本时,大多数身份提供商(IDP)允许任何依赖方(RP)使用其身份服务。只有少数国内流离失所者操作了RP的白名单;我遇到的是PayPal Access(现在称为Log In with PayPal)。关闭访问有商业原因,但封闭的政策需要国内流离失所者额外的努力,所以大多数人都没有打扰。
2015年4月,Google放弃了OpenID 2.0,转而使用OpenID Connect,其中每个RP都是OAuth 2.0客户端应用程序,具有自己的客户端ID和提供商发布的客户端密钥。通常,OAuth要求每个客户端在带外注册每个提供程序,这在每个提供程序使用唯一API公开受保护资源时都很好。但OpenID Connect是一种常见的身份验证API,当用户在RP的登录页面中输入相应的OpenID标识符URI时,所有IDP都应以相同的方式公开。因此,OpenID Connect spec描述了可选的动态客户端注册(dyn-reg)功能,该功能允许RP自动注册为OAuth客户端,如Hans Z.'s answer to "Can you use OpenID Connect without obtaining OAuth credentials?"中所述。但是,每个IDP都必须努力实施dyn-reg。 Google和PayPal是选择不这样做的OpenID Connect IDP的示例。即使提供商确实实施了dyn-reg,规范仍允许IDP要求RP首先提供由提供商发布的有效初始访问令牌。因此,如果有 n RP和 m 公共IDP,人类必须阅读并接受合同 n * m 次。
换句话说,OpenID 2.0中的默认值是打开的; OpenID Connect中的默认值已关闭。
因此,随着越来越多的OpenID提供商遵循谷歌的领先优势并放弃OpenID 2.0而转向OpenID Connect,如果我现场直播RP,我希望粘贴标识符URI的最终用户被拒绝并显示错误消息效果"此标识符的提供者对于Example.com是未知的,并且不支持动态客户端注册。"然后,运行我的Web应用程序的服务器的操作员必须读取此类错误的日志,并手动注册每个此类IDP以获取客户端凭据。我必须在此Web应用程序中构建配置变量,以便服务器运营商提前为每个受欢迎的提供商指定客户端凭据,以便转换网站的用户而不是失望。
我想让已经下载我的应用程序的服务器操作员在其域中的Web服务器上安装它并作为RP生效。因此,我希望其设置过程能够建议服务器运营商可能遇到此问题的公共IDP,而不仅仅是空白"添加OpenID Connect Provider"形式让管理员自己离开。
其他相关问题(OpenID Connect providers和List of OpenID Connect providers)的列表太短,过时,没有将预期手动注册的IDP分开,也没有将流行的IDP与利基IDP分开。例如,Salesforce.com是allows only its own customers to be RPs的利基IDP,我不认为最终用户希望能够从公共Web应用程序上的利基IDP输入标识符。 我想知道从哪些来源我可以收集有关广泛使用的国内流离失所者的信息并保持最新。
那么,在网站上线之前,我将如何寻找不支持开放式动态客户端注册的知名通用OpenID Connect提供商?
答案 0 :(得分:0)
<德尔> 2。如果我理解正确,OpenID Connect完全支持您的用例。
<德尔> 3。我建议您查看IdentityServer3:https://github.com/IdentityServer/IdentityServer3,因为我相信它会满足您的要求。我个人使用它,它是由安全域专家维护和开发的优秀开源项目。
更新
我不确定您是否真的需要动态客户端注册,在OIDC中您的整个应用程序被视为单个客户端/ RP。您的应用程序客户端/用户(以及应用程序的每个客户端的用户集)完全受大多数OIDC提供商的支持,无需动态客户端注册。如果您的应用程序是动态门户的保护伞,您将需要DCR。