我使用和JWT tokens创建了一个asp.net 5 rc-1身份验证服务器。
这是我的startup.cs代码
var key = new RsaSecurityKey(new RSACryptoServiceProvider(2048).ExportParameters(true));
TokenAuthOptions tokenOptions = new TokenAuthOptions()
{
Audience = "webappname",
Issuer = "http://webappname.com",
Key = key,
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.RsaSha512Signature)
};
app.UseJwtBearerAuthentication(options =>
{
options.TokenValidationParameters.IssuerSigningKey = tokenOptions.Key;
options.TokenValidationParameters.ValidAudience = tokenOptions.Audience;
options.TokenValidationParameters.ValidIssuer = tokenOptions.Issuer;
options.TokenValidationParameters.ValidateSignature = true;
options.TokenValidationParameters.ValidateLifetime = true;
options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(0);
});并在同一个项目中创建了一个MVC控制器OAuthController.cs来获取令牌
[HttpGet, Route("Signin")]
public dynamic Signin(string un, string pw)
{
if (valid user)
{
DateTime? expires = DateTime.UtcNow.AddMinutes(5);
var token = GetToken(un, expires);
return new { authenticated = true, entityId = 1, token = token, tokenExpires = expires };
}
return new { authenticated = false };
}
private string GetToken(string user, DateTime? expires)
{
var handler = new JwtSecurityTokenHandler();
ClaimsIdentity identity = new ClaimsIdentity(new GenericIdentity(user, "TokenAuth"), new[] { new Claim("EntityID", "1", ClaimValueTypes.Integer) });
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin2"));
var securityToken = handler.CreateToken(
issuer: _tokenOptions.Issuer,
audience: _tokenOptions.Audience,
signingCredentials: _tokenOptions.SigningCredentials,
subject: identity,
expires: expires
);
return handler.WriteToken(securityToken);
}现在,当我用用户名和密码调用方法Signin时,我得到的是jwt令牌,它可以访问同一个应用程序中的[Authorize("Bearer", Roles="Admin2")]控制器方法。
如何使用相同的令牌来对不同的应用程序进行身份验证
发布于 2016-04-26 22:41:23
您的第二个应用程序只需要访问用于签名令牌的相同RSA密钥。然后,通过配置与第一个应用程序完全相同的app.UseJwtBeaerAuthentication方法,您可以在第二个应用程序中使用令牌。
https://stackoverflow.com/questions/35655855
复制相似问题