Ramakrishna.Pathuri Ответов: 0

Реализация функции проверки подлинности проверки подлинности 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;

0 Ответов