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



我正在使用Web API和其他客户端(移动应用程序,浏览器)进行应用程序。我想为同一用户具有不同的每个客户端类型的访问令牌。原因是,以便用户可以从一台设备登录,但可以在其他设备上登录(类似于Facebook的发生方式)。

我知道ASP .NET身份框架生成了无视客户端类型的用户的单个令牌。还有其他框架吗?还是必须通过在数据库中存储一些客户端来完成?

您可以手动创建令牌,当时您可以向令牌添加索赔并将其还给客户端。客户端向服务器提出请求后,您可以从令牌中提取索赔并决定设备类型。

创建令牌如下:

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"必须具有您的设备类型。

我相信为不同的客户生成不同的令牌是不需要实现您目标的。首先,在ASP.NET中,向/令牌端点的每个令牌请求都会发出新的携带者令牌。

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

注意:请记住出于安全原因发行短期寿命到期时间,您可以使用刷新令牌端一旦到期后就发出新的代币。

最新更新