所以我已经阅读了很多有关授权和身份验证的内容。.由于我不确定使用哪种工具最合适,所以现在我感到困惑。
让我给你一点背景。
我正在尝试创建一个包含3个服务的多租户应用程序,这些服务是:
我在创建身份服务时遇到的问题是:
我曾考虑过使用Identity Server 4
,但我不喜欢无法为端点自定义路由的想法。至少,如果我将来需要更改逻辑,创建自己的服务将允许我进行这种自定义。
到目前为止,我已经创建了使用以下代码请求访问令牌的功能:
[HttpPost]
public async Task<IActionResult> Token([FromHeader(Name = "client_id")] string tenantId, [FromBody] LoginRequest request)
{
var applicationUser = await _userManager.GetUserAsync(tenantId, request.email);
var result = await _signInManager.PasswordSignInAsync(applicationUser, request.password, true, false);
var claimsIdentity = new ClaimsIdentity(new Claim[]
{
new Claim("userId", applicationUser.Id),
new Claim("tenantId", tenantId),
new Claim("email", request.email)
});
// Add claims of the user from the data soruce
claimsIdentity.AddClaims(await _userManager.GetClaimsAsync(applicationUser));
var key = Encoding.ASCII.GetBytes("3ce1637ed40041cd94d4853d3e766c4d");
var token = new JwtSecurityToken(
claims: claimsIdentity.Claims,
expires: DateTime.Now.AddMinutes(1),
signingCredentials: new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
);
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return Ok(new LoginResponse { AccessToken = new AccessToken { Token = token, ExpiresIn = 200 }});
}
再次,因为我不熟悉授权和身份验证,所以不确定我的请求令牌调用是否应该要求grant_type
?
我不确定请求标头中提供的tenantId是否应为client_secret
而且,我不确定在将哪种信息提供给用户并针对用户进行存储之前,应该将哪种信息加密为refresh_token
。
老实说,由于我被困了好几天,任何建议现在都将是有帮助的。如果您对应该做什么或使用什么工具有任何建议,请告诉我
答案 0 :(得分:0)
正如您所说的是一个具有不同角色的多租户应用程序,我认为最好的选择是身份服务器4。
您可以根据需要对其进行自定义,并且有很多在线帮助可用于设置
编写自己的身份验证是一个坏主意