如何在 ASP .NET Web API 中为不同的客户端类型创建多个令牌

How to create multiple tokens for different client type in ASP .NET Web API

我正在使用 Web API 和不同客户端(移动应用程序、浏览器)开发一个应用程序。我想为同一用户的每种客户端类型设置不同的访问令牌。原因是,这样用户可以从一台设备注销,但在其他设备上保持登录状态(类似于 Facebook 的情况)。

我知道 ASP .Net Identity 框架为用户生成单个令牌,而不考虑客户端类型。还有其他框架吗?还是必须通过在数据库中存储一些客户详细信息来完成?

我认为为不同的客户生成不同的令牌对于实现您的目标是不必要的。首先,在 asp.net 中,为每个对 /token 端点的令牌请求发出一个新的承载令牌。

因此,每个客户端都会针对每个请求发出不同的令牌。然后客户端(网络、移动或任何其他)可以保存令牌并使用它来访问授权资源。注销只是忘记客户端的令牌。

注意:出于安全原因,请记住发行有效期较短的令牌,您可以使用刷新令牌结束来在过期后发行新令牌。

您可以手动创建令牌,然后您可以向令牌添加声明并将其返回给客户端。一旦客户端向服务器发出请求,您就可以从令牌中提取声明并决定设备类型。

像下面这样创建令牌:

var identity = new ClaimsIdentity(Startup.OAuthOptions.AuthenticationType);

AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
identity.AddClaim(new Claim("device_type", "android/ios/web"));

ticket.Properties.IssuedUtc = currentUtc;
var expiryInterval = int.Parse("20");

var access_token = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);

请求中的访问令牌和来自令牌的声明,如下所述:

ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
var customClaimValue = principal.Claims.Where(c => c.Type == "device_type").Single().Value;

"customClaimValue" 必须有您的设备类型。