방법: 사용자 지정 오류 처리에 오류 URL 사용

업데이트: 2015년 6월 19일

Azure에 적용합니다.

적용 대상

  • Microsoft Azure Active Directory 액세스 제어(액세스 제어 서비스 또는 ACS라고도 함)

요약

이 항목에서는 오류 URL 기능을 사용하여 신뢰 당사자 응용 프로그램에서 사용자 지정 로그인 오류 처리를 구현하는 방법에 대해 설명합니다. 오류 URL을 사용하면 애플리케이션이 로그하고 오류에 응답할 수 있도록 ACS가 신뢰 당사자 애플리케이션에 다시 생성하는 오류를 보낼 수 있습니다. 예를 들어 ASP.NET 웹 사이트에서는 오류 URL 기능을 사용하여 웹 사이트와 동일한 디자인으로 브랜드가 지정된 오류 메시지를 최종 사용자에게 표시할 수 있습니다.

콘텐츠

  • 목표

  • 개요

  • 단계 요약

  • 1단계 - 오류 URL 기능을 사용하도록 설정

  • 2단계 - Error 도우미 클래스 만들기

  • 3단계 - JSON 인코딩 오류 메시지 처리

  • 4단계 - 오류 페이지에 대한 익명 액세스 구성

  • 5단계 – 작업 테스트

목표

  • 오류 URL 기능을 사용하는 데 필요한 구성을 파악합니다.

  • ACS에서 오류 메시지를 처리하는 데 필요한 도우미 코드를 식별합니다.

  • 잠재적 문제를 파악하고 해결합니다.

개요

오류 URL은 로그인 프로세스 중에 오류가 발생하는 경우 ACS가 사용자를 리디렉션하는 웹 주소를 지정합니다. 오류 URL 대상은 일반적으로 신뢰 당사자 응용 프로그램에서 호스팅되는 사용자 지정 오류 페이지입니다. 리디렉션의 일부로 ACS는 JSON으로 인코딩된 HTTP URL 매개 변수로 신뢰 당사자 애플리케이션에 오류에 대한 정보를 반환합니다. 사용자 지정 오류 페이지에 JSON 인코딩 오류 정보를 포함하거나 정적 도움말 텍스트를 표시할 수 있습니다. 다음은 JSON 인코딩 오류 메시지의 샘플입니다.

{"context":null,"httpReturnCode":401,"identityProvider":"Google","timeStamp":"2010-12-17 21:01:36Z","traceId":"16bba464-03b9-48c6-a248-9d16747b1515","errors":[{"errorCode":"ACS30000","errorMessage":"OpenID 로그인 응답을 처리하는 동안 오류가 발생했습니다."},{"errorCode":"ACS50019","errorMessage":"사용자가 로그인을 취소했습니다."}]}

단계 요약

다음 프로세스를 사용하여 ACS 오류 메시지를 처리합니다.

  • 1단계 - 오류 URL 기능을 사용하도록 설정

  • 2단계 - Error 도우미 클래스 만들기

  • 3단계 - JSON 인코딩 오류 메시지 처리

  • 4단계 - 오류 페이지에 대한 익명 액세스 구성

  • 5단계 – 작업 테스트

1단계 - 오류 URL 기능을 사용하도록 설정

신뢰 당사자에 대해 오류 URL 기능을 사용하도록 설정하려면

  1. Microsoft Azure 관리 포털(https://manage.WindowsAzure.com)로 이동하여 로그인한 다음 Active Directory를 클릭합니다. (문제 해결 팁: "Active Directory" 항목이 없거나 사용할 수 없음)

  2. Access Control 네임스페이스를 관리하려면 네임스페이스를 선택한 다음 관리를 클릭합니다. 또는 Access Control 네임스페이스를 클릭하고 네임스페이스를 선택한 다음 관리를 클릭합니다.

  3. 신뢰 당사자 응용 프로그램을 클릭하고 신뢰 당사자 응용 프로그램을 선택합니다.

  4. 신뢰 당사자 응용 프로그램 편집 페이지에서 오류 URL 필드에 오류 페이지 URL을 입력합니다.

    ACS는 로그인 오류가 발생할 때 사용자를 이 페이지로 리디렉션합니다. 또한 ACS는 오류 세부 정보를 포함하는 JSON URL 인코딩 매개 변수를 이 페이지로 보냅니다.

2단계 - Error 도우미 클래스 만들기

이 단계에서는 JSON 인코딩 오류 메시지를 역직렬화하는 Error 도우미 클래스를 만듭니다.

Error 도우미 클래스를 만들려면

  1. 웹 응용 프로그램에 클래스 파일을 추가하고 이름을 Error.cs와 같이 지정합니다.

  2. Error 클래스를 다음과 같이 구현합니다.

    public class Error
    {
        public string errorCode { get; set; }
        public string errorMessage { get; set; }
    }
    

    다른 클래스 파일을 추가하고 ErrorDetails.cs와 같은 이름을 지정합니다.

  3. ErrorDetails 클래스를 다음과 같이 구현합니다.

    public class ErrorDetails
    {
        public string context { get; set; }
        public int httpReturnCode { get; set; }
        public string identityProvider { get; set; }
        public Error[] errors { get; set; }
    }
    

이러한 클래스는 ACS에서 오류 메시지를 처리할 때 다음 단계에서 사용됩니다.

3단계 - JSON 인코딩 오류 메시지 처리

이 단계에서는 ACS에서 생성하는 JSON 인코딩 오류 메시지를 처리하는 방법을 보여 줍니다.

ACS에서 생성된 JSON 인코딩 오류 메시지를 처리하려면

  1. ASP.NET 응용 프로그램에 ASPX 웹 페이지를 추가하고 ErrorPage.aspx와 같이 이름을 지정합니다.

  2. ASP.NET 태그에 다음 레이블 컨트롤을 추가합니다.

    <asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> 
    <asp:Label ID="lblErrorMessage" runat="server"></asp:Label> 
    
  3. 페이지의 코드 숨김 파일인 ErrorPage.aspx.cs로 전환합니다.

  4. 맨 위에 다음 선언을 추가합니다.

    using System.Web.Script.Serialization;
    
  5. Page_Load 메서드에 다음 코드를 추가합니다.

    JavaScriptSerializer serializer = new JavaScriptSerializer(); ErrorDetails error = serializer.Deserialize<ErrorDetails>( 
    
    
                                         Request["ErrorDetails"] ); lblErrorMessage.Text = string.Join("<br/>", 
                                        error.errors.Select(er => string.Format("Error Code {0}: {1}", 
                                        er.errorCode, er.errorMessage)).ToArray());
    
    

    이 코드는 ACS에서 JSON으로 인코딩된 오류 메시지를 처리합니다.

4단계 - 오류 페이지에 대한 익명 액세스 구성

이 단계에서는 ErrorPage.aspx 페이지에 대한 익명 액세스를 구성합니다. 페이지가 보호되어 있으며 권한 부여가 필요한 경우에는 무한 리디렉션 루프가 생성됩니다. ACS가 페이지에 액세스하려고 할 때 이 문제가 발생하면 ACS는 JSON으로 인코딩된 오류를 보냅니다.

참고

이렇게 하면 오류 페이지에 익명으로 액세스할 수 있으며, 페이지가 HTML를 다시 에코하는 코드를 포함하거나 데이터베이스에 데이터를 쓸 수 있기 때문에 사이트 간 스크립팅 및 SQL 주입 공격을 방지하기 위한 단계를 수행해야 합니다. 이렇게 하는 방법은 다음 리소스에 자세히 설명되어 있습니다.

오류 페이지에 대한 익명 액세스를 구성하려면

  • 응용 프로그램에서 web.config를 열고 다음 항목을 추가합니다.

    <location path="ErrorPage.aspx">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
    

    이렇게 하면 페이지에서 무한 리디렉션 루프가 발생하지 않습니다.

5단계 – 작업 테스트

이 단계에서는 오류 URL 구성 및 구현을 테스트합니다.

신뢰 당사자에 대해 오류 URL 기능을 사용하도록 설정하려면

  1. Microsoft Azure 관리 포털(https://manage.WindowsAzure.com)로 이동하여 로그인한 다음 Active Directory를 클릭합니다. (문제 해결 팁: "Active Directory" 항목이 없거나 사용할 수 없음)

  2. Access Control 네임스페이스를 관리하려면 네임스페이스를 선택한 다음 관리를 클릭합니다. 또는 Access Control 네임스페이스를 클릭하고 네임스페이스를 선택한 다음 관리를 클릭합니다.

  3. 규칙 그룹을 클릭한 다음 신뢰 당사자 응용 프로그램과 연결된 규칙 그룹을 클릭합니다.

  4. 경고

    다음 단계는 실행을 취소할 수 없습니다. 그러나 생성된 규칙을 삭제한 경우 간편하게 다시 생성할 수 있습니다.

  5. 규칙 그룹 편집 페이지에서 규칙 섹션에 있는 모든 규칙을 선택하고 선택한 규칙 삭제를 클릭합니다.

  6. 저장을 클릭합니다.

  7. 웹 사이트로 돌아와서 브라우저를 통해 페이지 중 하나로 이동합니다.

  8. 인증을 위해 ID 공급자(Windows Live ID(Microsoft 계정), Google, Facebook, Yahoo!또는 신뢰 당사자에 대해 ID 공급자로 구성된 모든 항목으로 리디렉션되어야 합니다.

  9. 인증에 성공하면 ACS로 다시 리디렉션되어야 합니다. 이 경우 규칙이 정의되지 않으므로 오류가 발생합니다.

  10. 이 오류는 2단계 – 오류 도우미 클래스 만들기에서 만든 오류 페이지에 표시되어야 하며 다음과 유사합니다.

    uri:WindowsLiveID 오류 코드 ACS50000: 토큰을 발급하는 동안 오류가 발생했습니다.

사용자의 동의를 거부하여 작업을 테스트할 수도 있습니다. 사용자 동의는 Facebook 또는 Google을 통해 로그온할 때 제공됩니다.