我正在使用 OWIN 在 .NET API 应用程序中搜索新的访问令牌声明的方法。我正在读这篇文章,我读到可以使用刷新令牌。
这个问题的背景如下。我想在access_token的声明中存储一些信息,这些声明可以通过用户的操作进行更新。例如:用户名存储在声明中。用户决定更新他/她的用户名。是否可以更新索赔?
但我无法在任何地方找到一个很好的例子。如果不破坏应用程序的安全性,这是否可行?
答案 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));
}