资源服务器中的ASP.NET 5 JWT令牌验证

时间:2016-02-26 15:39:35

标签: c# authentication oauth asp.net-core jwt

我使用asp.net 5 rc-1JWT tokens

创建了身份验证服务器

这是我的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")]控制器方法。

如何使用相同的令牌来验证不同的应用

1 个答案:

答案 0 :(得分:0)

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