BLOG

Amazon Cognito를 위한 ASP.NET Core ID 제공자 시사회 소개
작성일: 2019-01-10

저희는 Amazon CognitoAuthentication Extension Library의 일반 이용 가능 여부를 발표했습니다. 이는 .NET Core 개발자들이 응용 프로그램에서 Amazon Cognito와 쉽게 통합할 수 있습니다.

 

저희는 통합 과정을 ASP.NET Core로 더욱 단순화하기를 원합니다. 그래서 Amazon Cognito를 위한 맞춤 ASP.NET Core ID 제공자의 개발자 시사회를 하려고 합니다.

 

대상.NET 표준 2.0은 Amazon Cognito를 위한 맞춤형 ASP.NET Core ID 제공자는 ASP.NET ID용 맞춤형 스토리지 제공자로 Amazon Cognito에서 제공되는 ASP.NET Core ID 멤버십 시스템을 확장합니다. 몇 줄의 코드에서 여러분은 ASP.NET Core 응용 프로그램에서 Amazon Cognito에 기반을 둔 인증과 허가를 추가할 수 있습니다.

 

시작하기

ASP.NET Core 응용 프로그램에 다음 NuGet 종속성을 추가해야 할 것입니다.

 

 

먼저 appsettings.json 파일에 다음 사용자 풀 속성을 추가하십시오.

 

“AWS”: {

“Region”: “<your region id goes here>”,

“UserPoolClientId”: “<your user pool client id goes here>”,

“UserPoolClientSecret”: “<your user pool client secret goes here>”,

“UserPoolId”: “<your user pool id goes here>”

}

 

또는 구성 파일에 의존하는 대신IAmazonCognitoIdentityProvider 및 CognitoUserPool 클라이언트 인스턴스를 Startup.cs file 파일에 삽입하거나 새로 게시된 AWS 시스템 관리자를 사용하여 웹 응용 프로그램 매개 변수를 저장할 수 있습니다.

 

public void ConfigureServices(IServiceCollection services)

{

// Adds your own instance of Amazon Cognito clients

// cognitoIdentityProvider and cognitoUserPool are variables

// that you would have instantiated yourself

services.AddSingleton<IAmazonCognitoIdentityProvider>(cognitoIdentityProvider);

services.AddSingleton<CognitoUserPool>(cognitoUserPool);

}

 

Amazon Cognito를 ID 제공자로 추가하려면 Startup.cs 파일에서 기존 ApplicationDbContext 참조(있는 경우)를 제거한 다음 services에 콜을 추가하십시오. ConfigureServices 메서드 안의 AddCognitoIdentity();입니다.

 

public void ConfigureServices(IServiceCollection services)

{

// Adds Amazon Cognito as Identity Provider

services.AddCognitoIdentity();

}

 

마지막으로, 아직 활성화되지 않은 경우 Startup.cs 파일에서 ASP.NET Core에서 인증 지원을 사용하도록 설정하십시오.

 

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

// If not already enabled, you need to enable ASP.NET Core authentication

app.UseAuthentication();

}

 

CognitoUser 클래스를 웹 응용 프로그램 사용자 클래스로 사용

Amazon Cognito를 위한 ASP.NET Core ID 제공자는 ASP.NET Core ID 클래스 UserManager 및 SigninManager(CognitoUserManager 및 CognitoSigninManager)의 맞춤형 구현을 제공합니다. 이러한 구현은 다음과 같은 Amazon Cognito 사용 사례를 지원하도록 설계되었습니다.

 

  • 사용자 계정 관리(계정 등록, 계정 확인, 사용자 속성 업데이트, 계정 삭제)
  • 사용자 암호 관리(암호 업데이트, 암호 재설정)
  • 사용자 로그인 및 사용자 로그아웃(2단계 인증 포함 또는 제외)
  • 역할 및 클레임 관리
  • 인증

 

Amazon Cognito를 ID 멤버십 시스템으로 사용하는 것은 기존의 scaffolded ID 컨트롤러에서 CognitoUserManager 및 CognitoSigninManager를 사용하는 것만큼 간단합니다.

Register.cshtml.cs

 

public async Task<IActionResult> OnPostAsync(string returnUrl = null)

{

returnUrl = returnUrl ?? Url.Content(“~/”);

if (ModelState.IsValid)

{

// Retrieves a new user with the pool configuration set up

CognitoUser user = _pool.GetUser(Input.UserName);

// Sets the required user email

user.Attributes.Add(CognitoAttributesConstants.Email, Input.Email);

// Set additional attributes required by the user pool

user.Attributes.Add(“custom:domain”, “foo.bar”);

// Registers the user in the pool

SigninResult result = await _userManager.CreateAsync(user, Input.Password);

if (result.Succeeded)

{

_logger.LogInformation(“User created a new account with password.”);

 

await _signInManager.SignInAsync(user, isPersistent: false);

// Redirects to the account confirmation page

return RedirectToPage(“./ConfirmAccount”);

}

foreach (var error in result.Errors)

{

ModelState.AddModelError(string.Empty, error.Description);

}

}

 

// If we got this far, something failed, redisplay form

return Page();

}

 

완전한 샘플은 Amazon Cognito ASP.NET Core ID 제공자 GitHub 저장소에서 찾을 수 있습니다.(사용자 등록, 2단계 요인 인증 사용 혹은 제외와 함께 사용자 로그인, 계정 확인 포함)

 

인증 및 권한 부여

기본적으로 인증은 Secure Remote 암호 프로토콜을 사용하는 Amazon CognitoAuthentication Extension Library에서 지원됩니다. 게다가 ASP.Net Core 인증은 허가를 처리할 수 있는 단순하고 선언적인 역할과 풍부한 정책 기반 모델을 제공합니다.

 

저희는 역할 기반 승인을 지원하기 위해 Amazon Cognito 그룹을 사용합니다. “Admin” 그룹에 속한 사용자만 액세스를 제한하면 다음과 같이 액세스를 제한하려는 컨트롤러 또는 방법에 다음과 같은 속성을 추가하는 것만큼 간단합니다.

 

[Authorize(Roles = “Admin”)]

public class AdminController : Controller

{

}

 

마찬가지로, 저희는 클레임 기반 인증을 지원하기 위해 Amazon Cognito 사용자 속성을 사용합니다. Amazon Cognito는 사용자 지정 특성 앞에 “custom” 키를 붙입니다.

 

다음 요약은 사용자 지정 정책을 만들고 리소스에 적용하여 특정 “도메인” 특성 값을 가진 Amazon Cognito 사용자에 대한 리소스 액세스를 제한하는 방법을 보여 줍니다. Startup.cs 파일의 ConfigureServices 메서드 안에서 이를 할 수 있습니다.

 

public void ConfigureServices(IServiceCollection services)

{

List<string> authorizedDomains = new List<string>()

{

“amazon.com”,

“foo.bar”

};

 

services.AddAuthorization(options =>

{

options.AddPolicy(“AuthorizedDomainsOnly”, policy => policy.RequireClaim(“custom:domain”, authorizedDomains));

});

 

}

 

 

[Authorize(Policy = “AuthorizedDomainsOnly”)]

public class RestrictedController : Controller

{

}

 

피드백 제공하기

이 라이브러리는 개발자 미리보기 중이고 저희는 여러분이 Amazon Cognito를 위한 ASP.NET Core ID 제공자를 어떻게 사용하고 있는지 알고 싶습니다. 피드백을 주시고 GitHub의 출처를 확인해 보십시오!

 

.NET 커뮤니티의 AWS SDK에 가입하십시오. Gitter에서 채팅하십시오.

 

GitHub 문제 페이지에서 기능 요청을 제출하거나 기존 기능에 대한 상향 투표를 수행하십시오.

 

원문 URL : https://aws.amazon.com/ko/blogs/developer/introducing-the-asp-net-core-identity-provider-preview-for-amazon-cognito/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.