Jim*_*obo 6 c# jwt asp.net-core asp.net-core-webapi
我正在使用以下代码生成令牌,其中包含简单的 JSON 数据
[HttpPost("Token")]
public IActionResult Token(string userid)
{
if ((!string.IsNullOrEmpty(userid)))
{
var user = webuserprovider.GetWebUser(userid);
// validate for 0 records
if (user.Count() > 0)
{
// if user return 1 row
var claimsdata = new[]
{
new Claim("id",user.First().UserID),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretKey"));
var signInCred = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
users:{ "id": user.First().UserID},
issuer: "mysite.com",
audience: "yoursite.com",
expires: DateTime.Now.AddMinutes(3),
claims: claimsdata,
signingCredentials: signInCred
);
var jwt = new JwtSecurityTokenHandler().WriteToken(token);
return Ok(new {jwt});
// return Ok( new JwtSecurityTokenHandler().WriteToken(token) );
}
else
{// return BadRequest(new { message = "UserID does not exist" }); }
// return BadRequest("Could not verify user");
return NotFound();
}
}
return Unauthorized();
}
}
}
Run Code Online (Sandbox Code Playgroud)
JWT 有效载荷数据:
{
"id": "1234",
"exp": 1538637844,
"iss": "mysite.com"
}
Run Code Online (Sandbox Code Playgroud)
如何在 Asp.net Core Web API REST 中的 C# 中使用如下自定义声明创建有效负载数据?在有效负载数据中 {} 中包含用户 ID -->
{
"id": "1234",
"exp": 1538637844,
"iss": "mysite.com"
"user": {
"id" :"user1"
}
}
Run Code Online (Sandbox Code Playgroud)
这是代码
[HttpPost("Token")]
public IActionResult Token(string userid)
{
if ((!string.IsNullOrEmpty(userid)))
{
var user = webuserprovider.GetWebUser(userid);
// validate for 0 records
if (user.Count() > 0)
{
// if user return 1 row
var claimsdata = new[]
{
new Claim("subject","custom claims"),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretKey"));
var signInCred = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
users:{ "id": user.First().UserID},
issuer: "mysite.com",
audience: "yoursite.com",
expires: DateTime.Now.AddMinutes(3),
claims: claimsdata,
signingCredentials: signInCred
);
//custom claims as per requirements
var jsonu = new { id = user.First().UserID };
token.Payload["user"] = jsonu;
//End of custom claims
var jwt = new JwtSecurityTokenHandler().WriteToken(token);
return Ok(new {jwt});
// return Ok( new JwtSecurityTokenHandler().WriteToken(token) );
}
else
{// return BadRequest(new { message = "UserID does not exist" }); }
// return BadRequest("Could not verify user");
return NotFound();
}
}
return Unauthorized();
}
Run Code Online (Sandbox Code Playgroud)
和最终的有效载荷 PAYLOAD: DATA
{
"subject": "custom claims",
"exp": 1538651961,
"iss": "mysite.com",
"user": {
"id": "1234"
}
}
Run Code Online (Sandbox Code Playgroud)
对于 JWT,我通常使用 JWT nuget 包,因为我不喜欢它的开箱即用方式。
Install-Package JWT
Run Code Online (Sandbox Code Playgroud)
查看文档。使用这个包非常简单。
var token = new JwtBuilder()
.WithAlgorithm(new HMACSHA256Algorithm())
.WithSecret(secret)
.AddClaim("exp", DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeSeconds())
.AddClaim("claim2", "claim2-value")
.Build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13877 次 |
| 最近记录: |