Open Id Connect 1.0 Core规范的第4节规定:
在某些情况下,登录流程由OpenID提供商或另一方发起,而不是依赖方。在这种情况下,启动器在其登录启动端点重定向到RP,该端点请求RP向指定的OP发送验证请求。此登录启动端点可以是RP的深层链接,而不是默认登录页面。支持OpenID Connect动态客户端注册1.0 [OpenID.Registration]的RP使用initiate_login_uri注册参数注册此端点值。
发起登录请求的一方通过重定向到RP的登录启动端点,传递以下参数:
需要。 RP要向其发送认证请求的OP的颁发者标识符。它的值必须是使用https方案的URL。 login_hint可选。向授权服务器提供有关最终用户可能用于登录的登录标识符的提示。如果客户端收到此字符串值参数的值,则必须将其作为login_hint参数值包含在Authentication Request中。 target_link_uri可选。身份验证后请求RP重定向到的URL。 RP必须验证target_link_uri的值,以防止被用作外部站点的开放重定向器。参数可以使用HTTP GET方法作为查询参数传递,也可以作为在用户代理中自动提交的HTML表单值传递,因此通过HTTP POST方法传输。
如果由扩展定义,则可以发送其他参数。客户必须忽略任何未被理解的参数。
客户端应该采用框架破坏和其他技术来防止最终用户通过Clickjacking等攻击而不知情地通过第三方网站登录。更多详细信息,请参见[RFC6819]的第4.4.1.9节。
假设我在OP service.com上注册了一个RP客户端foo,我想知道它是如何适用于客户端foo指示指示OP service.com将请求转发给另一个OP(如google)的用例。 RP如何最终收到id_token。
它不适合您的用例:
因此,第4节不适用于您的用例。
匹配您的用例的一种方法是让service.com同时作为OP和SP执行:service.com可以充当foo的OP和Google的SP。 FranceConnect实现了这种用例的一个例子。这是法国公共服务,在其客户面前(法国公共服务,例如医疗保险)和法国公共身份提供者(一些公共行政部门,如公共财政部门)。这样,最终用户连接到初始服务,服务将此用户重定向到FranceConnect作为OP,FranceConnect作为SP将此用户重定向到另一个OP,此最终OP将用户重定向回FranceConnect,获取用户的身份从最终的OP开始,然后将用户重定向到初始服务,该服务从FranceConnect获取用户的身份(FranceConnect知道身份,因为它之前从最终的OP获得了它)。
以下是此用例的UML序列图: