【问题标题】:Is it possible to renew the access token in OWIN是否可以在 OWIN 中更新访问令牌
【发布时间】:2017-05-23 07:35:39
【问题描述】:

我正在寻找一种使用 OWIN.NET API 应用程序中新的访问令牌声明的方法。我正在阅读这篇文章,并了解到可以使用刷新令牌。

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

但是我在任何地方都找不到如何做到这一点的好例子。在不破坏应用程序安全性的情况下,这是否可能实现?

【问题讨论】:

  • 如果您指的是身份验证令牌,您可以生成 owin 令牌并以编程方式覆盖 cookie。 stackoverflow 中有关于令牌生成的帖子。

标签: .net oauth owin


【解决方案1】:

我不相信这是可能的。 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));
}

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多