使用Owin / Katana / OIDC的客户端如何使用刷新令牌?

时间:2020-07-20 17:29:34

标签: asp.net-mvc owin openid-connect katana

我有一个ASP.net MVC Web应用程序,该应用程序使用Microsoft的Owin中间件(Microsoft.Owin.Security.OpenIdConnect)来配置OpenID Connect身份验证。我的身份提供者(Okta)配置为支持刷新令牌,并且我已经确认它可以正常工作。登录时,我的应用程序将按预期接收访问,ID和刷新令牌。这些令牌经过验证,并通过名为“ .AspNet.Cookies”(默认值)的cookie返回给客户端。在每个请求中,cookie和这些令牌都被解析为一组声明。到目前为止很好。 ?

Owin(Katana)中间件似乎对刷新令牌没有做任何进一步的事情,因此我实现了令牌客户端,以使用刷新令牌从我的IdP请求新的访问令牌。这按预期工作。 ?

两个问题:

  1. 应用程序应在何时何地检查访问令牌是否已过期并请求新的令牌?
  2. 收到新的访问权,ID和刷新令牌后,应用程序应如何以及在何处更新用户身份,声明和cookie?

1 个答案:

答案 0 :(得分:1)

OOK COOKIE更新

我相信this post结尾处的注释具有您可以编写的代码类型-我记得几年前使用过类似的代码。

在OWIN中,您使用的是由Cookie保护的服务器端堆栈,因此我不确定实际在何处使用访问令牌,但是也许其中之一是正确的?

  • C#后端使用令牌来调用API
  • Web UI从Web后端下载令牌,并向API进行Ajax调用

处理过期令牌的方式

处理过期的唯一可靠模式是在API客户端代码中执行此操作:

  • 当您从API收到401响应
  • 尝试刷新令牌,然后使用新的访问令牌重试API调用
  • 如果您无法刷新令牌,请重定向用户以再次登录

我总是用2个类来实现它,就像我的SPA代码中一样:

如果Web UI是从Web后端获取令牌然后调用API,则您的Web后端可以提供类似于我的Authenticator类中的MVC操作:

  • getAccessToken-获取当前访问令牌,尽管它可能会失败并显示401
  • refreshAccessToken-如果接收到401并且需要新令牌,请使用此

令牌有效时间

还可以在后台检查令牌到期时间-减少客户端401s的数量。但是,这并不是一个完整的解决方案,因为除到期日外,还可能由于其他原因而出现401。