내보내기(0) 인쇄
모두 확장

방법: 관리 서비스를 사용하여 OpenID ID 공급자 구성

게시: 2011년 4월

업데이트 날짜: 2011년 5월

적용 대상: Windows Azure

적용 대상

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

  • OpenID 2.0

요약

이 항목에서는 OpenID 프로토콜을 지원하는 ID 공급자를 추가하기 위해 수행해야 하는 기본적인 단계에 대해 간략하게 설명합니다. 관리 서비스를 통해 OpenID ID 공급자를 ACS에 추가할 수 있습니다. ACS 관리 포털을 통해 OpenID 공급자를 추가할 수는 없습니다. 이 항목에서 설명하는 OpenID는 ACS에서 지원하는 사양 버전인 OpenID 2.0 사양을 지칭합니다.

목차

  • 목표

  • 개요

  • 단계 요약

  • 1단계 - 구성 정보 수집

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

  • 3단계 - 관리 서비스 클라이언트 구현

  • 4단계 - ID 공급자 추가

목표

  • 필수 구성 요소 및 구성 정보를 파악합니다.

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

개요

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

단계 요약

  • 1단계 - 구성 정보 수집

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

  • 3단계 - 관리 서비스 클라이언트 구현

  • 4단계 - ID 공급자 추가

1단계 - 구성 정보 수집

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

  • 관리 서비스 ID 사용자 이름 - ManagementClient입니다.

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

    1. 액세스 제어 서비스 관리 포털(http://go.microsoft.com/fwlink/?LinkID=129428)에 로그온합니다.

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

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

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

  • 서비스 네임스페이스

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

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

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

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


        static string serviceIdentityUsernameForManagement = "ManagementClient";
        static string serviceIdentityPasswordForManagement = "...update to your password...";

        static string serviceNamespace = "...update to your namespace...";
        static string acsHostName = "accesscontrol.windows.net";
        static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";

        static string identityProviderName = "My Open ID Identity Provider";

        static string cachedSwtToken;


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

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

서비스 및 어셈블리에 대한 필수 종속성을 추가하려면

  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에 주의하십시오. 콘솔 응용 프로그램을 만들 때 기본값을 변경했거나 관리 서비스에 대한 참조를 추가한 경우에는 이 선언이 달라질 수 있습니다.

3단계 - 관리 서비스 클라이언트 구현

이 단계에서는 관리 서비스 클라이언트 구현을 캡슐화하는 메서드를 만듭니다.

관리 서비스 클라이언트를 구현하려면

  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;
    
            }
    
    
    

4단계 - ID 공급자 추가

이 단계에서는 앞서 만든 관리 서비스 클라이언트를 사용하여 OpenID ID 공급자를 추가합니다.

OpenID ID 공급자를 추가하려면

  1. Main 메서드 내에서 관리 서비스 클라이언트를 초기화합니다.

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

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

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. ID 공급자 로그인 주소를 업데이트합니다. 이 연습에서는 로그인 주소로 www.myopenid.com을 사용합니다. 기타 OpenID ID 공급자로는 Google과 Yahoo!가 있으며, 이들 공급자에는 자체 로그인 주소가 있습니다. 해당 주소는 각각 https://www.google.com/accounts/o8/ud 및 https://open.login.yahooapis.com/openid/op/auth입니다.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  5. 관리 서비스를 제외한 신뢰 당사자가 ID 공급자를 사용할 수 있도록 만듭니다.

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

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft