2016-02-26 107 views
1

我一直在使用asp.net 5 rc-1JWT tokensASP.NET 5 JWT令牌验证在资源服务器

创建认证服务器这是我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); 
} 

现在当我打电话给m带有用户名和密码的ethod Signin我收到了jwt令牌,它可以在同一个应用程序中访问[Authorize("Bearer", Roles="Admin2")]控制器方法。

我该如何使用相同的令牌验证不同的应用程序

回答

0

您的第二个应用程序只需要访问用于签署令牌的相同RSA密钥。然后,通过配置app.UseJwtBeaerAuthentication方法,您可以在第二个应用中使用该令牌,方法与第一个应用完全相同。

相关问题