AWS Cognito — поток учетных данных клиента .NET 6


Создание пула пользователей AWS Cognito

Перейдите на страницу сервиса AWS Cognito

Нажмите на кнопку создания пула пользователей

Шаг 1: Настройте опыт входа в систему

Выберите Email и нажмите далее

Шаг 2: Настройте требования безопасности

  • В разделе политика паролей выберите cognito по умолчанию
  • В разделе Многофакторная аутентификация выберите Нет MFA
  • В разделе Восстановление учетной записи пользователя выберите Включить самообслуживание восстановления учетной записи, а затем Только электронная почта
  • Нажмите далее

Шаг 3: Настройте процесс регистрации

Оставьте все значения по умолчанию и нажмите далее

Шаг 4: Настройте доставку сообщений

Выберите Отправить электронную почту с помощью Cognito и сохраните остальные настройки по умолчанию, затем нажмите далее

Шаг 5: Интегрируйте ваше приложение

  • Настройте имя пула пользователей в соответствии с предпочитаемым соглашением об именовании
  • Выберите Конфиденциальный клиент
  • Настройте имя клиента приложения
  • Нажмите далее

Шаг 6: Обзор и создание

  • Просмотрите свою конфигурацию
  • Нажмите Создать пул пользователей

Пулы пользователей

Просмотрите созданный пул пользователей

Конфигурация приложения и создание сервера ресурсов

Перейдите к созданному пулу пользователей

Перейдите на вкладку Интеграция приложений

Шаг 1: Создайте домен

  • В разделе Домен нажмите на Действия, а затем нажмите на Создать домен Cogniro
  • Введите уникальный префикс домена
  • Нажмите Создать домен Cognito

Шаг 2: Создать сервер ресурсов

  • Нажмите Создать сервер ресурсов
  • Настройте имя и идентификатор сервера ресурсов
  • Создайте пользовательские диапазоны для вашего приложения, которые будут использоваться при аутентификации
  • Нажмите Создать сервер ресурсов

Шаг 3: Настройте клиентское приложение

  • Выберите созданное приложение-клиент
  • В разделе Размещенный пользовательский интерфейс нажмите кнопку редактировать
  • В разделе Hosted sign-up and sign-in pages выберите пул пользователей поставщика идентификации cognito
  • Выберите тип гранта Client Credentials OAuth 2.0 Grant
  • Выберите пользовательский диапазон, который вы создали и хотите назначить приложению.
  • Нажмите Сохранить изменения

Создание API погоды

Шаг 1: Создайте API

Создайте проект API, если у вас его еще нет.

Шаг 2: Добавьте пакеты NuGet

Добавьте следующие пакеты NuGet:

  • https://www.nuget.org/packages/Amazon.AspNetCore.Identity.Cognito/
  • https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer/

Шаг 3: Настройте auth в Program.cs

Добавьте этот блок кода в Program.cs в конструкторе.

builder.Services.AddCognitoIdentity();

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.Authority = builder.Configuration["AWSCognito:Authority"];
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
                ValidateAudience = false
    };
});
Войти в полноэкранный режим Выйти из полноэкранного режима

Добавьте следующее под app.UseHttpsRedirection(); в Program.cs

app.UseAuthentication();
app.UseAuthorization();
Войти в полноэкранный режим Выйти из полноэкранного режима

Добавьте следующие use’ы в Program.cs

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
Войти в полноэкранный режим Выйти из полноэкранного режима

После завершения работы ваш Program.cs будет выглядеть следующим образом.

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddCognitoIdentity();

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.Authority = builder.Configuration["AWSCognito:Authority"];
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        ValidateAudience = false
    };
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();
Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг 4: Настройка конфигурационного файла

Добавьте этот раздел в файл appsettings.Development.json

URL-адрес органа власти состоит из следующих строк

https://cognito-idp.{region}.amazonaws.com/{userpoolid}


  "AWSCognito": {
    "Authority": "[https://cognito-idp](https://cognito-idp/).{region}.amazonaws.com/{userpoolid}"
  }
Вход в полноэкранный режим Выйти из полноэкранного режима

Вы можете найти идентификатор пула пользователей в AWS на странице Amazon Cognito в разделе пулов пользователей.

Шаг 5: Добавьте атрибут authorize в конечную точку GetWeatherForecast

В файле WeatherForecastController.cs добавьте атрибут Authorize к конечной точке GetWeatherForecast и добавьте Microsoft.AspNetCore.Authorization к использованию.

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace AWSCognitoWeatherAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [Authorize]
        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Вызов API прогноза погоды с помощью Postman

Шаг 1: Создайте новую коллекцию

  • Создайте новую коллекцию для API
  • Добавьте новый запрос в коллекцию для конечной точки прогноза погоды (https://localhost:7214/WeatherForecast).

Шаг 2: Настройка авторизации коллекции

  • Нажмите на коллекцию API Weather Forcast и перейдите на вкладку Авторизация.
  • В выпадающем списке Тип выберите OAuth 2.0
  • В разделе Configure New Token (Настройка нового токена) дайте токену имя
  • В раскрывающемся списке Тип гранта выберите Учетные данные клиента
  • В разделе интеграции приложений пула пользователей в AWS получите url домена.
  • Добавьте домен в раздел Access Token URL в postman и дополните его /oauth2/token
  • Получите идентификатор клиента из клиентского приложения в AWS
  • Получите секрет клиента из клиентского приложения в AWS
  • Получите пользовательскую область видимости в Hosted UI
  • Добавьте clientid, client secret и scope в postman.
  • Нажмите получить новый токен доступа
  • Нажмите использовать токен во всплывающем окне
  • В запросе Weather Forecast на вкладке Authorization убедитесь, что Type установлен на Inherit auth from parent.

Шаг 3: Вызов API Weather

Нажмите отправить на запросе прогноза погоды, чтобы получить ответ от API.

Это так просто !🎉

Вы можете взглянуть на репозиторий ниже, чтобы найти полную кодовую базу.
https://github.com/Bassonrichard/AWSCognitoWeatherAPI

Оцените статью
Procodings.ru
Добавить комментарий