Azure Mobile Apps용 ASP.NET Framework SDK를 사용하는 방법

이 항목에서는 주요 Azure 앱 Service Mobile Apps 시나리오에서 .NET 백 엔드 서버 SDK를 사용하는 방법을 보여 줍니다. Azure Mobile Apps SDK를 사용하면 ASP.NET 애플리케이션의 모바일 클라이언트로 작업할 수 있습니다.

Warning

이 문서에서는 v5.0.0 라이브러리로 대체되는 v4.2.0 라이브러리 버전에 대한 정보를 다룹니다. 최신 정보는 최신 버전에 대한 문서를 참조하세요.

Azure Mobile Apps ASP.NET Framework 백 엔드 만들기

Visual Studio 2019를 사용하여 ASP.NET Framework 앱을 만들 수 있습니다.

  • ASP.NET 웹 애플리케이션(.NET Framework) 템플릿을 선택합니다. 이 템플릿을 찾는 데 문제가 있는 경우 C#, 모든 플랫폼 및 선택합니다.
  • 애플리케이션의 이름과 위치를 선택한 후 Web API 프로젝트 템플릿을 선택합니다. 애플리케이션에 대한 올바른 기본 서비스 컬렉션이 설치됩니다.

SDK 다운로드 및 설치

SDK는 NuGet.org에서 사용할 수 있으며, Azure Mobile Apps 사용을 시작하는 데 필요한 기본 기능을 제공합니다. 패키지를 설치하려면 다음을 수행합니다.

  1. 마우스 오른쪽 단추로 프로젝트를 클릭하고, NuGet 패키지 관리...를 선택합니다.
  2. 찾아보기 탭에서 검색 상자에 입력 Microsoft.Azure.Mobile.Server 한 다음 Enter 키를 누릅니다.
  3. Microsoft.Azure.Mobile.Server.Quickstart 패키지를 선택합니다.
  4. 설치를 클릭합니다.
  5. 프롬프트에 따라 설치를 완료합니다.

이 프로세스를 반복하여 설치 Microsoft.Owin.Host.SystemWeb 합니다.

참고 항목

종속성으로 사용되는 패키지(예 Newtonsoft.JSON : 또는 System.IdentityModel.Jwt.)를 업데이트하지 마세요. 이러한 패키지의 API는 대부분의 경우 변경되었으며 이제 ASP.NET Framework용 Azure Mobile Apps와 호환되지 않습니다.

서버 프로젝트 초기화

Azure Mobile Apps 서버 프로젝트는 다른 ASP.NET Framework 프로젝트와 유사하게 초기화됩니다. 은 OWIN Startup 클래스를 포함합니다. OWIN 시작 클래스를 추가하려면 다음을 수행합니다.

  1. 마우스 오른쪽 단추로 프로젝트를 클릭한 다음, 추가>새 항목을 차례로 선택합니다.

  2. >일반을 선택한 다음 OWIN 시작 클래스 템플릿을 선택합니다.

  3. 시작 이름으로 이름을 Startup.cs 입력합니다.

  4. Startup.cs 파일의 내용은 다음 코드와 비슷합니다.

    using Microsoft.Azure.Mobile.Server.Config;
    using Microsoft.Owin;
    using Owin;
    using System.Web.Http;
    
    [assembly: OwinStartup(typeof(WebApplication1.Startup))]
    namespace WebApplication1
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                HttpConfiguration config = new HttpConfiguration();
                new MobileAppConfiguration()
                    // no added features
                    .ApplyTo(config);
                app.UseWebApi(config);
            }
        }
    }
    

    OwinStartup프로젝트에 따라 , 네임스페이스 및 클래스 이름이 달라집니다. 특히 메서드의 Configuration() 내용을 바꾸고 지시문을 적절하게 조정 using 해야 합니다.

개별 기능을 사용하려면 ApplyTo를 호출하기 전에 MobileAppConfiguration 개체에서 확장 메서드를 호출해야 합니다. 예를 들어 다음 코드는 초기화 중에 특성 [MobileAppController] 이 있는 모든 API 컨트롤러에 기본 경로를 추가합니다.

new MobileAppConfiguration()
    .MapApiControllers()
    .ApplyTo(config);

다음 설정은 Entity Framework를 사용하여 테이블 및 API 컨트롤러가 모두 SQL 서비스에 액세스할 수 있도록 하는 "정상" 사용으로 간주됩니다.

new MobileAppConfiguration()
    .AddMobileAppHomeController()
    .MapApiControllers()
    .AddTables(
        new MobileAppTableConfiguration()
            .MapTableControllers()
            .AddEntityFramework()
    )
    .MapLegacyCrossDomainController()
    .ApplyTo(config);

사용되는 확장 메서드는 다음과 같습니다.

  • AddMobileAppHomeController() 에서는 기본 Azure Mobile Apps 홈페이지를 제공합니다.
  • MapApiControllers() 는 특성으로 [MobileAppController] 데코레이팅된 WebAPI 컨트롤러에 대한 사용자 지정 API 기능을 제공합니다.
  • AddTables() 는 테이블 컨트롤러에 /tables 대한 엔드포인트 매핑을 제공합니다.
  • AddTablesWithEntityFramework() 는 Entity Framework 기반 컨트롤러를 /tables 사용하여 엔드포인트를 매핑하기 위한 간단한 작업입니다.
  • MapLegacyCrossDomainController() 은(는) 로컬 개발을 위한 표준 CORS 헤더를 제공합니다.

SDK 확장

다음 NuGet 기반 확장 패키지는 애플리케이션에서 사용할 수 있는 다양한 모바일 기능을 제공합니다. MobileAppConfiguration 개체를 사용하여 초기화하는 동안 확장을 사용하도록 설정합니다.

  • Microsoft.Azure.Mobile.Server.Quickstart 기본 Mobile Apps 설정을 지원합니다. 초기화 중에 UseDefaultConfiguration 확장 메서드를 호출하여 구성에 추가되었습니다. 이 확장에는 알림, 인증, 엔터티, 테이블, Cross-do기본 및 Home 패키지 등의 확장이 포함됩니다.
  • Microsoft.Azure.Mobile.Server.Home 웹 사이트 루트에 대해 기본 이 모바일 앱이 실행 중인 페이지를 구현합니다. AddMobileAppHomeController 확장 메서드를 호출하여 구성에 추가합니다.
  • Microsoft.Azure.Mobile.Server.Tables 데이터로 작업하기 위한 클래스를 포함하고 데이터 파이프라인을 설정합니다. AddTables 확장 메서드를 호출하여 구성에 추가합니다 .
  • Microsoft.Azure.Mobile.Server.Entity 를 사용하면 Entity Framework에서 SQL Database의 데이터에 액세스할 수 있습니다. AddTablesWithEntityFramework 확장 메서드를 호출하여 구성에 추가합니다.
  • Microsoft.Azure.Mobile.Server.Authentication 을 사용하면 토큰의 유효성을 검사하는 데 사용되는 OWIN 미들웨어를 인증하고 설정합니다. AddAppServiceAuthenticationIAppBuilder.UseAppServiceAuthentication 확장 메서드를 호출하여 구성에 추가합니다.
  • Microsoft.Azure.Mobile.Server.Notifications 푸시 알림을 사용하도록 설정하고 푸시 등록 엔드포인트를 정의합니다. AddPushNotifications 확장 메서드를 호출하여 구성에 추가합니다 .
  • Microsoft.Azure.Mobile.Server.CrossDomain 모바일 앱에서 레거시 웹 브라우저에 데이터를 제공하는 컨트롤러를 만듭니다. MapLegacyCrossDo기본Controller 확장 메서드를 호출하여 구성에 추가합니다.
  • Microsoft.Azure.Mobile.Server.Login 은 사용자 지정 인증 시나리오에서 사용되는 정적 메서드인 메서드를 제공합니다 AppServiceLoginHandler.CreateToken() .

서버 프로젝트 게시

이 섹션에서는 Visual Studio에서 .NET 백 엔드 프로젝트를 게시하는 방법을 보여 줍니다. 애플리케이션을 게시할 수 있는 다른 방법이 있습니다. 자세한 내용은 Azure 앱 Service 설명서를 참조하세요.

  1. Visual Studio에서 프로젝트를 다시 빌드하여 NuGet 패키지를 복원합니다.
  2. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 클릭합니다.
  3. 이전에 이 프로젝트를 게시하지 않은 경우 게시를 구성합니다.
    • 대상에 대해 Azure를 선택합니다.
    • 특정 대상에 대해 Azure App Service(Windows)를 선택합니다.
    • 배포하려는 앱 서비스 인스턴스를 선택합니다. 없는 경우 해당 항목을 사용하여 + 만듭니다.
    • Finish를 클릭합니다.
  4. 이전에 SQL 데이터베이스를 연결하지 않은 경우 SQL Database 옆의 구성을 클릭합니다.
    • Azure SQL Database 선택
    • 데이터베이스를 선택합니다. 데이터베이스가 없거나 다른 데이터베이스를 사용하려는 경우 새 데이터베이스와 서버를 만들려면 클릭합니다 + .
    • 데이터베이스 연결 문자열 이름으로 입력 MS_TableConnectionString 합니다. 제공된 상자에 사용자 이름과 암호를 입력합니다.
    • 마침을 클릭합니다.
  5. 게시 클릭

Azure에 게시하는 데 다소 시간이 걸립니다. 자세한 내용은 Visual Studio 설명서를 참조 하세요.

테이블 컨트롤러 정의

모바일 클라이언트에 SQL 테이블을 노출하는 테이블 컨트롤러를 정의합니다. 테이블 컨트롤러를 구성하려면 세 단계가 필요합니다.

  1. DTO(데이터 전송 개체) 클래스를 만듭니다.
  2. Mobile DbContext 클래스에 테이블 참조를 구성합니다.
  3. 테이블 컨트롤러를 만듭니다.

데이터 전송 개체(DTO)는 EntityData에서 상속하는 일반 C# 개체입니다. 예시:

public class TodoItem : EntityData
{
    public string Text { get; set; }
    public bool Complete {get; set;}
}

DTO는 SQL 데이터베이스 내에서 테이블을 정의하는 데 사용됩니다. 데이터베이스 항목을 만들려면 사용 중인 속성에 DbContext 다음을 추가 DbSet<> 합니다.

public class MobileServiceContext : DbContext
{
    private const string connectionStringName = "Name=MS_TableConnectionString";

    public MobileServiceContext() : base(connectionStringName)
    {

    }

    public DbSet<TodoItem> TodoItems { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Add(
            new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
                "ServiceColumnTable", (property, attributes) => attributes.Single().ColumnType.ToString()));
    }
}

마지막으로 새 컨트롤러를 만듭니다.

  1. 마우스 오른쪽 단추로 Controllers 폴더를 클릭합니다.

  2. Web API Web API>2 컨트롤러 선택 - 비어 있음

  3. 컨트롤러의 이름을 입력합니다.

  4. 새 컨트롤러의 내용을 다음 코드로 바꿉니다.

    public class TodoItemController : TableController<TodoItem>
    {
        protected override void Initialize(HttpControllerContext controllerContext)
        {
            base.Initialize(controllerContext);
            ZUMOAPPNAMEContext context = new ZUMOAPPNAMEContext();
            DomainManager = new EntityDomainManager<TodoItem>(context, Request);
        }
    
        // GET tables/TodoItem
        public IQueryable<TodoItem> GetAllTodoItems()
        {
            return Query();
        }
    
        // GET tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public SingleResult<TodoItem> GetTodoItem(string id)
        {
            return Lookup(id);
        }
    
        // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task<TodoItem> PatchTodoItem(string id, Delta<TodoItem> patch)
        {
            return UpdateAsync(id, patch);
        }
    
        // POST tables/TodoItem
        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
        {
            TodoItem current = await InsertAsync(item);
            return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }
    
        // DELETE tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task DeleteTodoItem(string id)
        {
            return DeleteAsync(id);
        }
    }
    

테이블 페이징 크기 조정

기본적으로 Azure Mobile Apps는 요청당 50개의 레코드를 반환합니다. 페이징을 통해 클라이언트가 UI 스레드와 서버를 너무 오랫동안 연결하지 않으므로 사용자 환경이 양호합니다. 테이블 페이징 크기를 변경하려면 서버 쪽의 "허용되는 쿼리 크기"와 클라이언트 쪽 페이지 크기를 늘립니다. 서버 쪽의 "허용되는 쿼리 크기"는 EnableQuery 특성을 사용하여 조정됩니다.

[EnableQuery(PageSize = 500)]

PageSize가 클라이언트에서 요청한 크기와 동일하거나 큰지 확인합니다. 클라이언트 페이지 크기 변경에 대한 자세한 내용은 특정 클라이언트 HOWTO 설명서를 참조하세요.

사용자 지정 API 컨트롤러 정의

사용자 지정 API 컨트롤러는 엔드포인트를 노출하여 모바일 앱 백 엔드에 가장 기본적인 기능을 제공합니다. [MobileAppController] 특성을 사용하여 모바일 특정 API 컨트롤러를 등록할 수 있습니다. 이 특성은 MobileAppController 경로를 등록하고 Mobile Apps JSON 직렬 변환기를 설정하며 클라이언트 버전 검사 설정합니다.

사용자 지정 API 컨트롤러의 내용은 다음과 같습니다.

[MobileAppController]
public class CustomAPIController : ApiController
{
    // Content here
}

특성을 사용하여 구성한 후에는 다른 Web API와 MobileAppController 동일한 방식으로 사용자 지정 API를 정의할 수 있습니다.

인증 작업

Azure Mobile Apps는 App Service 인증/권한 부여를 사용하여 모바일 백 엔드를 보호합니다. 이 섹션에서는 .NET 백 엔드 서버 프로젝트에서 다음 인증 관련 작업을 수행하는 방법을 보여 줍니다.

서버 프로젝트에 인증 추가

MobileAppConfiguration 개체를 확장하고 OWIN 미들웨어를 구성하여 서버 프로젝트에 인증을 추가할 수 있습니다.

  1. Visual Studio에서 Microsoft.Azure.Mobile.Server.Authentication 패키지를 설치합니다.

  2. 프로젝트 파일에서 Startup.cs Configuration 메서드의 시작 부분에 다음 코드 줄을 추가합니다.

    app.UseAppServiceAuthentication(config);
    

    이 OWIN 미들웨어 구성 요소는 관련 App Service 게이트웨이에서 발급된 토큰의 유효성을 검사합니다.

  3. 인증이 [Authorize] 필요한 컨트롤러 또는 메서드에 특성을 추가합니다.

애플리케이션에 사용자 지정 인증 사용

Important

사용자 지정 인증을 사용하도록 설정하려면 먼저 Azure Portal에서 App Service에 대한 공급자를 선택하지 않고 App Service 인증을 사용하도록 설정해야 합니다. 이렇게 하면 호스팅될 때 환경 변수가 WEBSITE_AUTH_SIGNING_KEY 활성화됩니다.

App Service 인증/권한 부여 공급자 중 하나를 사용하지 않으려면 사용자 고유의 로그인 시스템을 구현할 수 있습니다. 인증 토큰 생성을 지원하기 위해 Microsoft.Azure.Mobile.Server.Login 패키지를 설치합니다. 사용자 자격 증명의 유효성을 검사하기 위한 고유한 코드를 제공합니다. 예를 들어 데이터베이스에서 솔트된 암호와 해시된 암호를 검사 수 있습니다. 아래 isValidAssertion() 예제에서 메서드(다른 곳에서 정의됨)는 이러한 검사 담당합니다.

사용자 지정 인증은 ApiController 만들기 및 registerlogin 작업 노출로 노출됩니다. 클라이언트는 사용자로부터 정보를 수집하는 데 사용자 지정 UI를 사용해야 합니다. 그런 다음, 표준 HTTP POST 호출을 사용하여 정보를 API에 제출합니다. 서버가 어설션의 유효성을 검사하면 메서드를 사용하여 토큰이 AppServiceLoginHandler.CreateToken() 발급됩니다. ApiController는 [MobileAppController] 특성을 사용하면 안 됩니다.

예제 login 작업:

public IHttpActionResult Post([FromBody] JObject assertion)
{
    if (isValidAssertion(assertion)) // user-defined function, checks against a database
    {
        JwtSecurityToken token = AppServiceLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) },
            mySigningKey,
            myAppURL,
            myAppURL,
            TimeSpan.FromHours(24) );
        return Ok(new LoginResult()
        {
            AuthenticationToken = token.RawData,
            User = new LoginResultUser() { UserId = userName.ToString() }
        });
    }
    else // user assertion was not valid
    {
        return this.Request.CreateUnauthorizedResponse();
    }
}

앞의 예제 LoginResultLoginResultUser 에서 필요한 속성을 노출하는 직렬화 가능한 개체입니다. 클라이언트는 로그인 응답이 양식의 JSON 개체로 반환될 것으로 예상합니다.

{
    "authenticationToken": "<token>",
    "user": {
        "userId": "<userId>"
    }
}

AppServiceLoginHandler.CreateToken() 메서드는 audienceissuer 매개 변수를 포함합니다. 두 매개 변수는 모두 HTTPS 스키마를 사용하여 애플리케이션 루트의 URL로 설정됩니다. 마찬가지로 secretKey를 애플리케이션의 서명 키 값으로 설정해야 합니다. 클라이언트에서 서명 키를 배포하지 마세요. 이 키를 사용하여 사용자를 가장할 수 있습니다. 환경 변수를 참조하여 App Service에서 호스트되는 WEBSITE_AUTH_SIGNING_KEY 동안 서명 키를 가져올 수 있습니다. 로컬 디버깅 컨텍스트에서 필요한 경우 인증을 사용하여 로컬 디버깅 섹션의 지침에 따라 키를 검색하고 이 키를 애플리케이션 설정으로 저장합니다.

발급된 토큰에는 다른 클레임 및 만료 날짜도 포함될 수 있습니다. 최소한 발급된 토큰은 제목(sub) 클레임을 포함해야 합니다.

인증 경로를 오버로드하여 표준 클라이언트 loginAsync() 메서드를 지원할 수 있습니다. 클라이언트가 로그인을 호출 client.loginAsync('custom'); 하는 경우 경로는 .이어야 /.auth/login/custom합니다. MapHttpRoute()을(를) 사용하여 사용자 지정 인증 컨트롤러에 대한 경로를 설정할 수 있습니다.

config.Routes.MapHttpRoute("custom", ".auth/login/custom", new { controller = "CustomAuth" });

loginAsync() 방법을 사용하면 인증 토큰이 서비스에 대한 모든 후속 호출에 연결됩니다.

인증된 사용자 정보 검색

App Service에서 사용자를 인증하면 할당된 사용자 ID 및 .NET 백 엔드 코드의 기타 정보에 액세스할 수 있습니다. 사용자 정보는 백 엔드에서 권한 부여 결정을 내리는 데 사용할 수 있습니다. 다음 코드는 요청과 연결된 사용자 ID를 가져옵니다.

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

SID는 공급자 특정 사용자 ID에서 파생되고 지정된 사용자 및 로그인 공급자에 대해 정적입니다. 잘못된 인증 토큰의 경우 SID가 null입니다.

또한 App Service는 로그인 공급자에서 특정 클레임을 요청할 수 있습니다. 각 ID 공급자는 ID 공급자 SDK를 사용하여 자세한 정보를 제공할 수 있습니다. 예를 들어 친구 정보에 대한 Facebook Graph API를 사용할 수 있습니다. Azure 포털의 공급자 블레이드에서 요청된 클레임을 지정할 수 있습니다. 일부 클레임에는 ID 공급자를 사용하여 더 많은 구성이 필요합니다.

다음 코드는 GetAppServiceIdentityAsync 확장 메서드를 호출하여 로그인 자격 증명을 가져오며 이는 Facebook Graph API에 대한 요청에 필요한 액세스 토큰을 포함합니다.

// Get the credentials for the logged-in user.
var credentials = await this.User.GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);

if (credentials.Provider == "Facebook")
{
    // Create a query string with the Facebook access token.
    var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token="
        + credentials.AccessToken;

    // Create an HttpClient request.
    var client = new System.Net.Http.HttpClient();

    // Request the current user info from Facebook.
    var resp = await client.GetAsync(fbRequestUrl);
    resp.EnsureSuccessStatusCode();

    // Do something here with the Facebook user information.
    var fbInfo = await resp.Content.ReadAsStringAsync();
}

GetAppServiceIdentityAsync 확장 메서드를 제공하는 System.Security.Principal에 문을 사용하여 추가합니다.

권한 있는 사용자에 대한 데이터 액세스 제한

이전 섹션에서는 인증된 사용자의 사용자 ID를 검색하는 방법을 보여 줬습니다. 이 값에 따라 데이터 및 다른 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어 테이블에 userId 열을 추가하고 사용자 ID로 쿼리 결과를 필터링하는 것은 반환된 데이터만 권한 있는 사용자로 제한하는 간단한 방법입니다. 다음 코드는 SID가 TodoItem 테이블의 UserId 열 값과 일치할 때만 데이터 행을 반환합니다.

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

// Only return data rows that belong to the current user.
return Query().Where(t => t.UserId == sid);

이 메서드는 Query() 필터링을 IQueryable 처리하기 위해 LINQ에서 조작할 수 있는 값을 반환합니다.

.NET Server SDK 디버그 및 문제 해결

Azure 앱 Service는 ASP.NET 애플리케이션에 대한 몇 가지 디버깅 및 문제 해결 기술을 제공합니다.

로깅

표준 ASP.NET 추적 작성을 사용하여 App Service 진단 로그에 쓸 수 있습니다. 로그에 쓰려면 먼저 Azure Mobile Apps 백 엔드에서 진단을 사용하도록 설정해야 합니다.

진단을 사용하도록 설정하고 로그에 쓰려면:

  1. 애플리케이션 로깅 사용(Windows)의 단계를 따릅니다.

  2. 코드 파일에 다음 using 문을 추가합니다.

    using System.Web.Http.Tracing;
    
  3. 다음과 같이 .NET 백 엔드에서 진단 로그로 쓸 추적 기록기를 만듭니다.

    ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
    traceWriter.Info("Hello, World");
    
  4. 서버 프로젝트를 다시 게시하고 Azure Mobile Apps 백 엔드에 액세스하여 로깅을 사용하여 코드 경로를 실행합니다.

  5. Access 로그 파일에 설명된 대로 로그를 다운로드하고 평가합니다.

인증을 사용한 로컬 디버깅

애플리케이션을 로컬로 실행하여 변경 내용을 클라우드에 게시하기 전에 테스트할 수 있습니다. 대부분의 Azure Mobile Apps 백 엔드의 경우 Visual Studio에 있는 동안 F5 를 누릅니다. 그러나 인증을 사용하는 경우 몇 가지 추가 고려 사항이 있습니다.

App Service 인증/권한 부여가 구성된 클라우드 기반 모바일 앱이 있어야 하며 클라이언트에 대체 로그인 호스트로 지정된 클라우드 엔드포인트가 있어야 합니다. 필요한 특정 단계는 클라이언트 플랫폼에 대한 설명서를 참조하세요.

모바일 백 엔드에 Microsoft.Azure.Mobile.Server.Authentication 을 설치했는지 확인합니다. 그런 다음, 애플리케이션의 OWIN 시작 클래스에서 다음에 적용된 후 MobileAppConfiguration 다음을 추가합니다 HttpConfiguration.

app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions()
{
    SigningKey = ConfigurationManager.AppSettings["authSigningKey"],
    ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] },
    ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] },
    TokenHandler = config.GetAppServiceTokenHandler()
});

앞의 예제에서는 HTTPS 체계를 사용하여 Web.config 파일 내에서 authAudienceauthIssuer 애플리케이션 설정을 애플리케이션 루트의 URL로 구성해야 합니다. 마찬가지로 authSigningKey를 애플리케이션의 서명 키 값으로 설정해야 합니다.

서명 키를 가져오려면 다음을 수행합니다.

  1. Azure Portal 내에서 앱으로 이동
  2. 도구>Kudu>Go를 클릭합니다.
  3. Kudu 관리 사이트에서 환경을 클릭합니다.
  4. 에 대한 값을 찾습니다 WEBSITE_AUTH_SIGNING_KEY.

로컬 애플리케이션 구성에서 authSigningKey 매개 변수에 서명 키를 사용합니다. 이제 모바일 백 엔드는 로컬로 실행할 때 토큰의 유효성을 검사할 수 있도록 준비되었으며, 클라이언트는 클라우드 기반 엔드포인트에서 토큰을 가져옵니다.