是否可以在OWIN中更新访问令牌

时间:2017-05-23 07:35:40

标签: .net oauth owin

我正在使用 OWIN .NET API 应用程序中搜索新的访问令牌声明的方法。我正在读这篇文章,我读到可以使用刷新令牌。

这个问题的背景如下。我想在access_token的声明中存储一些信息,这些声明可以通过用户的操作进行更新。例如:用户名存储在声明中。用户决定更新他/她的用户名。是否可以更新索赔?

但我无法在任何地方找到一个很好的例子。如果不破坏应用程序的安全性,这是否可行?

1 个答案:

答案 0 :(得分:0)

我不相信这是可能的。创建Oauth令牌后,无法对其进行修改,因为修改会导致签名变为无效(这是一件好事)。

如果消费应用程序和API在您的控制之下,消费应用程序将需要更新令牌(重新验证,使用刷新令牌等),否则这可能不是实际的限制。强加给你的API消费者。

另一种方法是避免在访问令牌中存储可更改的声明,而是在收到请求时填充从访问令牌中获取水分的ClaimsIdentity对象(在IPrincipal中)。这将允许您更新API中的值,但也不要求您的消费者每次声明需要更改时都获取新的访问令牌。缺点是你需要在每个请求上加载声明。您还需要在访问令牌中拥有一个值,以保证识别无法更改的用户。

您可以使用OwinMiddleware类执行此操作:

public override async Task Invoke(IOwinContext context)
{
    ClaimsIdentity identity = context.Authentication.User?.Identity as ClaimsIdentity;
    identity.AddClaims(new Claim("Name", "Value));
}