1

我在我的Web应用程序中使用基于令牌的安全性。服务器端使用C#编写,我使用openiddict登录和发放令牌,发现here。我正在使用Implict流。如何在Web应用程序中实现刷新令牌 - angularjs

默认情况下,我的令牌具有1小时的使用期限,之后您必须再次登录。我已经锁定我的API只接受持票人代币,而不是Cookie。

我想实现刷新令牌,但是在阅读了很多网站之后,似乎在网络应用上实施刷新令牌似乎不是一种由于黑客获取刷新令牌而走的好方法。我知道要使用刷新标记,您必须使用代码流而不是暗示,我可以这样做。

人们在他们的网络应用程序中如何避免这种情况?我不能成为唯一一个想要令牌在Web应用中持续一个多小时的人?

回答

2

由ID连接推荐的方法是在发送授权请求隐藏帧用相同的参数,所使用的初始隐流请求加prompt=none和任选的那些,一个id_token_hint对应于id_token你提取来自授权响应。

使用prompt=none时,身份提供商不会显示任何同意书表格,并且会直接将用户代理重定向到您指定的redirect_uri,并将新标记附加到URI片段中,就像传统的隐式流请求一样。您可以通过从popup.location.hash属性中提取它来检索它。

如果请求不能被处理(无效的请求,未经验证的用户,无效id_token_hint,需要同意,等等),则返回一个错误,并且身份提供商或者与一个error参数将用户重定向代理向redirect_uri或停止处理请求。

请注意,由于相同的来源策略,如果当前位置属于不同的域(例如,如果身份提供商拒绝将用户代理重定向到您的客户端应用程序),则不能访问popup.location.hash:它会抛出拒绝访问异常。在这种情况下,向“刷新”操作添加超时总是更好。

不幸的是,很少有图书馆可以帮助您完成这项任务。 oidc-token-manager就是其中之一,但它有一些限制,会阻止它在OpenIddict中使用OTB:它不支持原始RSA密钥(您必须在OpenIddict选项中明确使用X509证书),并且它不会发送在发送prompt=none请求时,OpenIddict所需的id_token_hint参数。

相关问题