ASP.NET Core Web API: авторизация с использованием Identity FrameworkC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ASP.NET Core Web API: авторизация с использованием Identity Framework

Сообщение Anonymous »

Я работаю над проектом веб-API ASP.NET Core, в котором хочу разрешить пользователям входить в систему с использованием пользователя/пароля, а также Google, Facebook и Apple. При использовании внешних сервисов для входа в систему необходимо создать пользователя, который будет использоваться для отслеживания его активности в приложении: назначать баллы, обменивать их на подарки и другие функции.
В настоящее время мое решение включает в себя:
  • Проверку токенов, полученных от внешних служб.
  • Генерацию токенов носителя JWT вручную. >
Но этот подход имеет множество недостатков и не использует многое из того, что предлагает Identity Framework. Пример получения контроллером пользователя по коду авторизации в Google:

Код: Выделить всё

[HttpPost("login")]
public async Task Login([FromBody] GoogleLoginRequest request)
{
try
{
var user = await _googleAuthService.GetUserDetails(request.IdToken);

if (user == null)
return BadRequest("Invalid user information received from Google services");

user = await _createUser.ExecuteAsync(user);

if (user == null)
return Problem("Unable to create user");

var tokenResponse = await _userTokenService.GenerateAccessToken(user);

return Ok(tokenResponse);
}
catch (Exception ex)
{
return Problem("Internal server error");
}
}
Как видите, носитель генерируется вручную с помощью UserTokenService:

Код: Выделить всё

public async Task GenerateAccessToken(IdentityUser user)
{
var userRoles = await _context.UserRoles
.Where(ur => ur.UserId == user.Id)
.Join(_context.Roles, ur => ur.RoleId, r => r.Id, (ur, r) => r.Name)
.ToListAsync();

var roleClaims = userRoles.Select(role => new Claim(ClaimTypes.Role, role)).ToList();

var claims = new List
{
new Claim(ClaimTypes.NameIdentifier, user.Id),
new Claim(ClaimTypes.Name, user.NormalizedUserName!),
new Claim(ClaimTypes.Email, user.Email!)
}
.Union(roleClaims);

var key = new SymmetricSecurityKey(Convert.FromBase64String(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var expiration = DateTime.UtcNow.AddHours(int.Parse(_configuration["Jwt:ExpirationInHours"]!));

var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: expiration,
signingCredentials: creds);

var jwt = new JwtSecurityTokenHandler().WriteToken(token);
var refreshToken = await GenerateRefreshTokenAsync(user);

return new AccessTokenResponse
{
AccessToken = jwt,
ExpiresIn = (int)(expiration - DateTime.UtcNow).TotalSeconds,
RefreshToken = refreshToken.Token
};
}
Мне хотелось бы знать, как правильно выполнить этот процесс с помощью SignInManager, UserManager и т. д., чтобы пользователь мог получить свой новый токен носителя, управляемый Identity. Рамки. Мы будем очень признательны за любые рекомендации, руководства и документы.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -framework
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ASP.NET Core Web API: авторизация с использованием Identity Framework
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • BFF для внутреннего API с AAD/Entra ID B2C (.NET/ASP.NET Core/Identity.Web)
    Anonymous » » в форуме C#
    0 Ответы
    106 Просмотры
    Последнее сообщение Anonymous
  • Угловая аутентификация/авторизация с Azure AD, подключенным к ASP.NET CORE WEB API
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»