OpenID Connect 推荐的方法是在隐藏帧中发送授权请求,其参数与您用于初始隐式流请求的参数相同,prompt=none
并且可选地,id_token_hint
对应于id_token
您从授权响应中提取的参数。
使用prompt=none
时,身份提供者不会显示任何同意表单,而是直接将用户代理重定向到redirect_uri
您指定的用户代理,并将新令牌附加到 URI 片段,就像经典的隐式流请求一样。popup.location.hash
您可以通过从属性中提取它来检索它。
如果无法处理请求(无效请求、未经身份验证的用户、无效id_token_hint
、需要同意等),则会返回错误,并且身份提供者将redirect_uri
使用error
参数将用户代理重定向到 或停止处理请求。
请注意,由于相同的来源策略,popup.location.hash
如果当前位置属于不同的域(例如,如果身份提供者拒绝将用户代理重定向到您的客户端应用程序),您将无法访问:它将抛出拒绝访问异常。在这种情况下,最好为“刷新”操作添加超时。
可悲的是,很少有库可以帮助您完成这项任务。oidc-token-manager就是其中之一,但它有一些限制将阻止它与 OpenIddict 一起使用 OTB:它不支持原始 RSA 密钥(您必须在 OpenIddict 选项中明确使用 X509 证书)并且它发送请求时不发送id_token_hint
OpenIddict 所需的参数prompt=none
。