Реализация функции проверки подлинности проверки подлинности Azure на 3.х - Вам утверждает текущего пользователя с помощью токена JWT
Я конвертирую dontcore web API в новый стек разработки, чтобы перейти на бессерверное использование функций Azure.
Я думаю, что мое приложение должно использовать Identity для хранения учетных данных пользователя и других деталей. и он должен пройти аутентификацию через базу данных удостоверений и сгенерироваться с помощью токенов JWT.
Я пытаюсь найти несколько примеров, которые могут быть полезны для понимания того, как реализовать JWT в функциях Azure.
Процесс генерации токенов JWT
public UserResponce AuthendicateUser(string username, string password) { bool valid_user= ValidateUser(username,password); if (vlaid_user) { // authentication successful so generate jwt token var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_jwtIssuerOptions.Value.JwtKey); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, "1"), new Claim(ClaimTypes.GivenName, username), new Claim(ClaimTypes.Role, UserRoleEnum.superadmin.ToString()), new Claim("hospitalid", "1") }), Expires = DateTime.UtcNow.AddMinutes(_jwtIssuerOptions.Value.JwtExpireMinutes), IssuedAt = DateTime.UtcNow, NotBefore = DateTime.UtcNow, Audience = _jwtIssuerOptions.Value.JwtAuidence, Issuer = _jwtIssuerOptions.Value.JwtIssuer, SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); string newJwttoken = tokenHandler.WriteToken(token); return new UserResponce { //HospitalId = user.HospitalId.Value, Token = newJwttoken, UserId = 1, UserName = username, Expires = DateTime.UtcNow.AddMinutes(_jwtIssuerOptions.Value.JwtExpireMinutes), }; } else { return null; } }
Используя такие функции, как ниже код, где пользователь, идентичность значений получаем значения null
var user = req.Свойство HttpContext.Пользователь;
ВАР тож = claimsprincipal с.Идентичность;
код функции
[FunctionName("Get_User")] public async Task<IActionResult> GetUser( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = Globals.UserRoute+"/getuser")] HttpRequest req, ILogger log, ClaimsPrincipal claimsPrincipal) { log.LogInformation("C# HTTP trigger function processed a request started"); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); AuthendicateModel data = JsonConvert.DeserializeObject<AuthendicateModel>(requestBody); var user = req.HttpContext.User; var identity = claimsPrincipal.Identity; var details = _userService.Username(); log.LogInformation("C# HTTP trigger function processed a request."); return new OkObjectResult(new ApiResponse(HttpStatusCode.OK, details, ResponseMessageEnum.Success.ToString())); }
Что я уже пробовал:
Написанный код, как и выше, после доступа к пользователю, идентификационные данные становятся нулевыми
var user = req.HttpContext.User; var identity = claimsPrincipal.Identity;