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

방법: ACS 관리 서비스를 사용하여 AD FS 2.0을 엔터프라이즈 ID 공급자로 구성

게시: 2011년 4월

업데이트 날짜: 2015년 6월

적용 대상: Azure

  • Microsoft® Azure™ Access Control Service (ACS)

  • Microsoft AD FS(Active Directory® Federation Services) 2.0

이 항목에서는 ID 공급자를 네임스페이스나 신뢰 당사자 응용 프로그램에 추가하는 방법에 대해 설명합니다. 이 작업을 수행하는 데 ACS 관리 서비스를 사용할 수 있습니다. 관리 서비스는 ACS 관리를 위해 사용자 지정 사용자 인터페이스를 작성할 때 그리고 다중 테넌트 SaaS(Software as a Service) 솔루션을 위해 새 테넌트 추가를 자동화할 때 특히 유용합니다.

  • 목표

  • 개요

  • 단계 요약

  • 1단계 – 구성 정보 수집

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

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

  • 4단계 – ID 공급자 추가

  • 5단계 – 작업 테스트

  • 요구 사항 및 구성 정보를 식별합니다.

  • 필요한 단계를 나열합니다.

  • 구성이 성공적인지 확인합니다.

ACS 관리 서비스는 코드에 ACS 기능을 표시하는 웹 서비스입니다. ACS 관리 서비스는 ACS 관리 포털 사용자 인터페이스에서 사용 가능한 기능 하위 집합을 비롯한 모든 ACS 기능에 액세스할 수 있습니다.

Microsoft 을 ID 공급자로 ACS에 추가하면 클라우드 기반 솔루션을 위해 회사 ID 관리에 투자된 사항을 재활용할 수 있습니다. 을 ID 공급자로 구성하려면 특정 단계가 뒤따르는 코드를 작성해야 합니다. 이 항목에서는 이러한 기본적인 단계에 대해 간략하게 설명합니다.

  • 1단계 – 구성 정보 수집

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

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

  • 4단계 – ID 공급자 추가

  • 5단계 – 작업 테스트

이 단계에서는 필요한 구성 정보를 수집하는 방법에 대해 설명합니다. 수집해야 하는 정보는 다음과 같습니다.

  • 관리 서비스 ID 사용자 이름. 기본값은 ManagementClient입니다.

  • 관리 서비스 ID 사용자 암호.

  • 네임스페이스 이름.

  • ACS 호스트 이름: accesscontrol.windows.net

  • 서명 인증서 문자열: 배포에서 AD FS 서명 인증서 문자열을 가져옵니다.

관리 서비스 ID 사용자 이름 및 암호를 찾으려면 다음 절차를 따릅니다.

  1. Microsoft Azure 관리 포털(https://manage.WindowsAzure.com)로 이동하여 로그인한 다음 Active Directory를 클릭합니다. (문제 해결 팁: "Active Directory" 항목이 없거나 사용할 수 없음) 액세스 제어 네임스페이스를 관리하려면 네임스페이스를 선택한 다음 관리를 클릭합니다. 또는 액세스 제어 네임스페이스를 클릭하고 네임스페이스를 선택한 다음 관리를 클릭합니다.

  2. 관리 서비스를 클릭한 후 관리 서비스를 선택합니다(예: ManagementClient).

  3. 이름 필드의 값은 Management Service identity username입니다.

  4. 자격 증명 섹션에서 암호를 클릭합니다. 암호 필드의 값은 관리 서비스 ID 암호입니다.

필요한 정보를 수집했으면 다음 단계를 수행하여 코드를 실행하는 샘플 콘솔 응용 프로그램을 만들어 을 ID 공급자로 추가합니다.

  1. Visual Studio를 시작하고 새 콘솔 응용 프로그램 프로젝트를 만듭니다.

  2. Program 클래스에서 모듈 범위가 있는 변수에 구성 정보 값을 할당합니다. 다음 코드 샘플은 이 작업의 수행 방법을 보여 줍니다.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    
    
    

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

  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;
    
    

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

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

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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;
    
            }
    
    

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

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

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

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

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

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
    
  5. ID 공급자 로그인 주소를 업데이트합니다.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  6. 관리 서비스를 제외한 신뢰 당사자가 ID 공급자를 사용할 수 있도록 만듭니다.

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

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

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

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

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

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

  6. 저장을 클릭합니다.

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

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft