是否可以在 OWIN 中更新访问令牌
Is it possible to renew the access token in OWIN
我正在寻找一种使用 OWIN 在 .NET API 应用程序中更新访问令牌声明的方法。我正在阅读这篇文章,我读到可以使用刷新令牌。
本题的上下文如下。我想在 acces_token 的声明中存储一些信息,这些信息可以通过用户的操作进行更新。因此,例如:用户名存储在声明中。用户决定更新 his/her 用户名。是否可以更新索赔?
但是我在任何地方都找不到如何执行此操作的好示例。这是否可能在不破坏应用程序安全性的情况下实现?
我不相信这是可能的。 Oauth 令牌一旦创建就无法修改,因为修改会导致签名无效(这是一件好事)。
消费应用程序将需要更新令牌(重新验证、使用刷新令牌等),如果消费应用程序和 API 在您的控制之下,这将有可能实现,否则这可能不是强加给 API 消费者的实际限制。
另一种方法是避免将可更改的声明存储在访问令牌中,而是填充 ClaimsIdentity 对象(在 IPrincipal 中),该对象在收到请求时使用其他声明从访问令牌中得到水合。这将允许您更新 API 中的值,但也不需要您的消费者在每次声明需要更改时都获取新的访问令牌。缺点是您需要为每个请求加载声明。您还需要在访问令牌中有一个值,该值保证可以识别永远无法更改的用户。
您可以使用 OwinMiddleware class:
public override async Task Invoke(IOwinContext context)
{
ClaimsIdentity identity = context.Authentication.User?.Identity as ClaimsIdentity;
identity.AddClaims(new Claim("Name", "Value));
}
我正在寻找一种使用 OWIN 在 .NET API 应用程序中更新访问令牌声明的方法。我正在阅读这篇文章,我读到可以使用刷新令牌。
本题的上下文如下。我想在 acces_token 的声明中存储一些信息,这些信息可以通过用户的操作进行更新。因此,例如:用户名存储在声明中。用户决定更新 his/her 用户名。是否可以更新索赔?
但是我在任何地方都找不到如何执行此操作的好示例。这是否可能在不破坏应用程序安全性的情况下实现?
我不相信这是可能的。 Oauth 令牌一旦创建就无法修改,因为修改会导致签名无效(这是一件好事)。
消费应用程序将需要更新令牌(重新验证、使用刷新令牌等),如果消费应用程序和 API 在您的控制之下,这将有可能实现,否则这可能不是强加给 API 消费者的实际限制。
另一种方法是避免将可更改的声明存储在访问令牌中,而是填充 ClaimsIdentity 对象(在 IPrincipal 中),该对象在收到请求时使用其他声明从访问令牌中得到水合。这将允许您更新 API 中的值,但也不需要您的消费者在每次声明需要更改时都获取新的访问令牌。缺点是您需要为每个请求加载声明。您还需要在访问令牌中有一个值,该值保证可以识别永远无法更改的用户。
您可以使用 OwinMiddleware class:
public override async Task Invoke(IOwinContext context)
{
ClaimsIdentity identity = context.Authentication.User?.Identity as ClaimsIdentity;
identity.AddClaims(new Claim("Name", "Value));
}