이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
확장 최소화

방법: ACS 관리 서비스를 사용하여 Facebook을 인터넷 ID 공급자로 구성

게시: 2011년 4월

업데이트 날짜: 2015년 6월

적용 대상: Azure

  • Microsoft® Azure™ ACS(액세스 제어 서비스)

  • Facebook

이 항목에서는 Facebook을 ID 공급자로 추가하기 위해 수행해야 하는 기본적인 단계에 대해 간략하게 설명합니다. ACS 관리 포털을 사용하여 Facebook을 ID 공급자로 추가할 수도 있고 ACS 관리 서비스를 사용해 해당 작업을 자동화할 수도 있습니다. ACS를 관리하기 위한 사용자 지정 사용자 인터페이스를 작성하거나, 다중 테넌트 SaaS(Software as a Service) 솔루션에 대해 새 테넌트 온보딩을 자동화하는 등의 시나리오에서는 관리 서비스를 사용하는 것이 유용합니다.

  • 목표

  • 개요

  • 단계 요약

  • 1단계 – 구성 정보 수집

  • 2단계 – 필수 서비스 및 어셈블리에 대한 참조 추가

  • 3단계 – 관리 서비스 프록시 구현

  • 4단계 – ID 공급자 추가

  • 5단계 – 작업 테스트

  • 필수 구성 요소 및 구성 정보를 식별합니다.

  • Facebook을 ID 공급자로 추가하기 위해 수행해야 하는 단계를 제시합니다.

  • 구성이 성공적인지 테스트합니다.

관리 서비스는 ACS의 주요 구성 요소 중 하나인 웹 서비스로, 관리 포털 사용자 인터페이스를 통해 사용 가능한 기능을 제공합니다. 관리 포털에서 수행할 수 있는 작업은 관리 서비스를 통해서도 수행할 수 있습니다. Facebook을 ACS에 대한 ID 공급자로 추가하면 인터넷 범위의 ID 관리 메커니즘 개발 및 유지 관리 작업을 줄일 수 있습니다. Facebook을 ID 공급자로 구성하는 작업을 수행하려면 특정 단계가 뒤따르는 코드를 작성해야 합니다. 이 항목에서는 이러한 기본적인 단계에 대해 간략하게 설명합니다.

  • 1단계 – 구성 정보 수집

  • 2단계 – 필수 서비스 및 어셈블리에 대한 참조 추가

  • 3단계 – 관리 서비스 프록시 구현

  • 4단계 – ID 공급자 추가

  • 5단계 – 작업 테스트

이 단계에서는 필수 구성 정보를 수집하는 방법을 식별 및 제시합니다. 수집해야 하는 정보는 다음과 같습니다.

  • 관리 서비스 ID 사용자 이름 - ManagementClient

  • 관리 서비스 ID 암호 - 관리 서비스용 서비스 ID 암호를 얻으려면 다음을 수행합니다.

    1. 액세스 제어 서비스 관리 포털에 로그온합니다.

    2. 관리 섹션에서 관리 서비스 링크를 클릭합니다.

    3. 관리 서비스 페이지에서 ManagementClient 링크(ManagementClient는 서비스의 실제 사용자 이름임)를 클릭합니다.

    4. 자격 증명 섹션에서 대칭 키암호 링크를 클릭합니다. 각 링크의 값은 동일하며, 해당 값이 암호입니다.

  • 서비스 네임스페이스

  • ACS 호스트 이름 - 일반적으로 accesscontrol.windows.net입니다.

  • Facebook 응용 프로그램 ID 및 응용 프로그램 암호 - 방법: Facebook을 ID 공급자로 구성의 지침을 따르세요.

필수 정보를 수집한 후에는 다음 단계에 따라 Facebook을 ID 공급자로 추가하는 코드를 실행할 샘플 콘솔 응용 프로그램을 만듭니다.

  1. Visual Studio® 2010을 열고 새 콘솔 응용 프로그램 프로젝트를 만듭니다.

  2. Program 클래스에서 다음과 같은 코드를 사용하여 앞서 수집한 정보를 모듈 범위 변수에 할당합니다.

static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

이 단계에서는 서비스와 어셈블리에 대한 필수 종속성을 식별 및 추가합니다.

  1. System.Web.Extensions에 대한 참조를 추가합니다.

  2. 관리 서비스에 대한 서비스 참조를 추가합니다. 관리 서비스 URL은 네임스페이스에 고유하며, 다음과 같습니다.

    https://YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. 다음 선언을 추가합니다.

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    using System.Globalization;
    using System.Runtime.Serialization.Json;
    using ConsoleApplication1.ServiceReference1;
    
    

마지막 선언인 ConsoleApplication1.ServiceReference1에 주의합니다. 콘솔 응용 프로그램을 만들 때 기본값을 변경했거나 관리 서비스에 대한 참조를 추가한 경우에는 이 선언이 달라질 수 있습니다.

이 단계에서는 관리 서비스 프록시 구현을 캡슐화하는 메서드를 만듭니다.

  1. 다음 메서드를 Program 클래스에 추가합니다.

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceEndpoint = String.Format(CultureInfo.InvariantCulture, "https://{0}.{1}/{2}",
                    serviceNamespace,
                    acsHostName,
                    acsManagementServicesRelativeUrl);
                ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
    
  2. GetTokenWithWritePermission 메서드와 해당 도우미 메서드를 구현합니다. 그러면 HTTP 요청의 Authorization 헤더에 SWT OAuth 토큰이 추가됩니다.

    public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + cachedSwtToken);
            }
    
            private static string GetTokenFromACS()
            {
                //
                // Request a token from ACS
                //
                WebClient client = new WebClient();
                client.BaseAddress = string.Format(CultureInfo.CurrentCulture, 
                                                   "https://{0}.{1}", 
                                                   serviceNamespace, 
                                                   acsHostName);
    
                NameValueCollection values = new NameValueCollection();
                values.Add("grant_type", "client_credentials");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("scope", client.BaseAddress + acsManagementServicesRelativeUrl);
    
                byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    
    
    
    

이 단계에서는 앞서 만든 관리 서비스 프록시를 사용하여 Facebook을 ID 공급자로 추가합니다.

  1. 기본 메서드에서 관리 서비스 프록시를 초기화합니다.

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. ID 공급자를 발급자로 추가합니다.

    Issuer issuer = new Issuer
    {
       Name = identityProviderName + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  3. ID 공급자를 만듭니다.

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
    
  4. 앞서 얻은 인증서를 기반으로 ID 공급자 서명 키를 만듭니다.

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  5. 관리 서비스를 제외한 신뢰 당사자가 ID 공급자를 사용할 수 있도록 만듭니다.

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    

  1. 액세스 제어 서비스 관리 포털에 로그온합니다.

  2. 액세스 제어 서비스 페이지의 신뢰 관계 섹션에서 규칙 그룹 링크를 클릭합니다.

  3. 사용 가능한 규칙 중 아무 규칙이나 클릭합니다.

  4. 규칙 그룹 편집 페이지에서 규칙 추가 링크를 클릭합니다.

  5. 클레임 규칙 추가 페이지의 클레임 발급자 섹션 드롭다운 목록에서 새로 추가된 ID 공급자를 선택합니다.

  6. 나머지 기본값은 그대로 둡니다.

  7. 저장을 클릭합니다.

ID 공급자에 대한 통과 규칙이 만들어졌습니다.

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft