ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. WSO2 IS-Salesforce 연동하기
    Tutorials & Tips/WSO2 Identity Server 2022. 5. 18. 22:25

    WSO2 IS는 Single Sign-On (이하 SSO) 기능을 통해 특정 서비스를 Service Provider로 등록 후 일련의 설정과정을 거치면 추가적인 로그인 없이 해당 서비스를 사용할 수 있는 기능을 제공합니다. 이하 게시글 내용을 통해 Salesforce를 Service Provider로 WSO2에 등록하여, SAML 기반의 SSO 방식으로 해당 서비스를 연동하는 방법을 알아보겠습니다.

     

    1. WSO2 IS config

    서버의 설정값 변경을 위해서는 아래 표시된 경로의 파일에 대한 수정이 필요합니다. WSO2는 로그인 시 기본적으로 사용자 ID를 이메일이 아닌 형식으로 받습니다. 하지만 Salesforce의 경우 사용자 ID를 이메일로 받기 때문에, 해당 부분을 수정하여 WSO2 내에서도 이메일로 로그인할 수 있게끔 설정값을 변경합니다. WSO2 환경구성 시 설치한 User Store 유형에 따라 일부 설정값에 차이가 있으며, 해당 값들은 다음과 같습니다.

     

    1-1 공통 수정

    [<IS_HOME>/repository/conf/deployment.toml]

    [tenant_mgt]
    enable_email_domain=true
    
    [super_admin]
    username="admin@wso2.com"
    password="admin"

    *해당 과정에서 username은 'pharos@info.com' 을 입력해주었습니다.

     

    [<IS_HOME>/repository/conf/claim-config.xml]

    <Claim>
     <ClaimURI>http://wso2.org/claims/username</ClaimURI>
     <DisplayName>Username</DisplayName>
     <AttributeID>mail</AttributeID> ** 기존값은 uid
     <Description>Username</Description>
    </Claim>

     

    [<IS_HOME>/repository/conf/identity/identity-mgt.properties]

    UserInfoRecovery.UseHashedUserNames=true
    UserInfoRecovery.UsernameHashAlg=SHA-1 ** 해당 부분은 사용하고자 하는 알고리즘을 사용해도 됨

     

    1-2 User Store 유형별 설정

    1-2-1 LDAP/AD

    [user_store]
    user_name_attribute = "mail"
    user_name_search_filter = "(&amp;(objectClass=person)(uid=?))"
    user_name_list_filter = "(&amp;(objectClass=identityPerson)(mail=*)))"

     

    1-2-2 JDBC

    [user_store]
    username_javas_cript_regex = "^[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$"
    username_java_regex = "^[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$"

     

    1-2-3 IS 실행

    sh wso2server.sh -Dsetup

    일련의 설정값을 변경한 뒤, Admin의 계정이 변경되었기 때문에 다음 예시와 같이 -Dsetup 옵션을 주고 서버를 실행시킵니다.

     

     

    2. Salesforce 설정

    2-1. 계정 생성 및 테마 전환

    해당 과정은 Salesforce의 개발자 계정 생성을 우선 필요로 합니다. 다음 링크로 접속하여 회원가입을 우선 진행합니다.

     

     

    Developer Edition Signup | Salesforce Developers

    Sign up for your Salesforce Developer Edition A full-featured copy of the Platform, for free Already have a Salesforce Developer Environment? Log in

    developer.salesforce.com

     

    <그림 1> 최초 로그인 시 상단 탭
    <그림 2> Lightning Experience로 전환된 Salesforce 메인화면

     

    가입 및 로그인 이후, 'Lightning Experience으로 전환' 을 클릭하고, 화면이 전환되면 우측 상단의 톱니바퀴 모양에서 '설정' 을 눌러주어 화면과 같이 편의를 위한 테마 전환을 마무리합니다.

     

    2-2. 도메인 생성

    <그림 3> '내 도메인' 최초 등록화면

    네비게이터에 '도메인' 을 검색 후, 회사 설정 탭의 내 도메인을 클릭합니다. 이후 도메인으로 사용할 내용을 입력 후, 범용성 검사 (Check Availability) 를 진행합니다. 최종적으로 유효하다면 도메인 등록을 클릭하여 등록과정을 마칩니다.

     

    2-3. SSO 설정

    2-3-1. SAML 활성화

    <그림 4> 싱글사인온 최초설정

    네비게이터에 '싱글사인온'을 검색 후 체크박스를 클릭 및 저장하여 SAML을 활성화합니다.

     

    2-3-2. SAML-SSO 설정

    <그림 5> 싱글사인온 SAML 등록 설정화면 (좌) / <그림 6> 등록 완료 후 예시

    항목명 변경사항 비고 / 예시
    이름 SSO -
    발급자 <YOUR_DOMAIN> wso2.my.com / localhost
    ID 공급자 인증서 .crt 형식의 인증서 파일 *게시글 하단 '인증서 생성' 참조
    SAML ID 유형 '어설션에 사용자의 Salesforce 사용자 이름이 포함됨' -
    SAML ID 위치 'ID는 Subject 문의 NameIdentifier 요소에 있습니다' -
    공급자 로그인 URL 식별 <YOUR_DOMAIN>/samlsso https://wso2.my.com:9443/samlsso
    사용자 정의 로그아웃 URL <YOUR_DOMAIN>/samlsso https://wso2.my.com:9443/samlsso
    API 이름 SSO -
    엔티티 ID https://saml.salesforce.com -

     

    명시한 바와 같이 설정값을 SAML 등록 설정화면에 입력하면, 우측과 같은 화면이 나타납니다. 여기서 <그림 6> 의 하단에 보면 '로그인 URL' 이 있는데, 해당 값은 추후 Service Provider를 수정할 때 사용하므로 별도로 기억해둡니다. (3-3-3-3. Inbound Authentication Configuration)

     

     

    2-3-3. 도메인 설정

     

    <그림 7> 내 도메인 - 인증 구성 설정 예시

     

    다시 '내 도메인' 으로 이동한 다음, 이전에 설정한 SAML-SSO를 도메인에 연동시킵니다. 도메인 배포 이후 화면 하단에 위치한 '인증 구성' 탭으로 이동한 뒤 편집 버튼을 누릅니다. 화면이 이동되면 '인증 서비스' 탭에 이전 과정에서 등록했던 SSO를 체크한 뒤 저장을 클릭하여 연동을 마무리합니다.

     

     

     

     

    3. WSO2 IS carbon

    서버에 관한 수정이 마무리되었다면, 이후 Salesforce와 연동할 수 있는 조건을 마련합니다. 

     

    3-1. Role 등록

    <그림 8> 네비게이터 (좌) / <그림 9> Users and Roles - Add (중) / <그림 10> Role 등록 예시 (우)

    화면 좌측의 네비게이터 - Users and Roles - Add - Add New Role을 클릭하면, 다음과 같이 Role을 추가하는 항목이 나타납니다. 해당 항목에서 Domain은 User Store 도메인과 Application, Internal 도메인이 함께 표시되는데, 해당 항목은 자신이 주로 사용하는 User Store 도메인으로 설정해줍니다. 이후 Finish를 눌러 Role을 추가합니다.

     

    해당 과정에서는 총 2개의 Role을 추가해줍니다. Role name은 다음과 같습니다.

    Role Name 1 : sales_user
    Role Name 2 : solution_manager

     

    3-2. Claim 추가

    예시 그림을 참조, 아래 값을 페이지에 입력해준 뒤 Add버튼을 눌러 Local Claim을 추가해줍니다. 작성자의 경우 개발환경 내에 2개의 User Store를 추가로 등록해두어, PRIMARY를 포함한 3개의 도메인에 대한 Claim을 추가해주었습니다.

    <그림 11> 네비게이터 (좌) / <그림 12> Claims - Add (중) / <그림 13> Add Local Claim 페이지 등록 예시 (우)

    항목명 변경사항
    Claim URI http://wso2.org/claims/sf.username
    Display Name Salesforce username
    Description
    Mapped Attribute mail
    Supported by Default Selected

     

    생성이 완료되면, LocalClaim 목록에서 다음과 같은 내용을 확인할 수 있습니다.

     

    <그림 14> List - Local Claim 등록 예시

    3-3. Service Providers 등록

    3-3-1. 생성

    <그림 15> Service Provider - Add

    먼저, WSO2 의 콘솔로 접근하여 Service Provider (이하 SP) 를 등록해줍니다.

    해당 과정에서는 SP를 등록한 뒤 SAML 관련 설정을 수정해야 합니다.

     

    사진과 같이, 콘솔 좌측의 표시된 부분인 Service Providers - Add를 클릭하면 그림과 같은 창이 뜨는데,

    이후 예제로 사용할 이름을 입력해준 뒤, Register를 클릭해 해당 SP를 등록해줍니다.

    해당 게시글에서는 SalesForceSample 으로 등록해주었습니다.

     

    3-3-2. 조회

    <그림 16> Service Provider - List

    이후 List를 클릭하면 다음과 같이 SP가 등록된걸 확인할 수 있는데, 이후 Edit를 눌러 해당 SP의 설정탭에 접근합니다.

     

    3-3-3. 수정

    다음 SP에서 수정해줄 하단 탭은 Claim Configuration, Role/Permission Configuration, Inbound Authentication Configuration 의 총 세개 부분입니다. 순차적으로 수정해줍니다.

     

    3-3-3-1. Claim Configuration

     

    확장된 탭에서 가장 위에 위치한 'Define Custom Claim Dialect' 를 체크한 이후 Service Provider Claim URIs에 아래 표의 값을 추가해줍니다.

    <그림 17> Claim Configuration 설정 예시

    Service Provider Claim Local Claim Requested Claim Mandatory Claim
    User.ProfileId http://wso2.org/claims/role Selected Selected
    User.Username http://wso2.org/claims/sf.username Selected Selected
    User.Email http://wso2.org/claims/emailaddress
    Selected Selected
    User.LastName http://wso2.org/claims/lastname Selected Selected

    이후 User.Username을 Subject Claim URI로 등록해주고, Claim 설정을 마칩니다.

     

    3-3-3-2. Role/Permission Configuration

     

    Claim Configuration 바로 하단의 Role/Permission Configuration 탭을 확장시켜 다음 Role 정보를 매핑합니다.

    <그림 18> Role/Permission Configuration 설정 예시

    Local Role Service Provider Role
    sales_user Standard Platform User
    solution_manager Solution Manager

     

    3-3-3-3. Inbound Authentication Configuration

    <그림 19> Inbound Authentication Configuration - SAML2 Web SSO Configuration

    이후 해당 SP의 하단 탭 중 그림과 같이 Inbound Authentication Configuration 탭을 확장시켜, SAML Web SSO Configuration 탭의 Configure 버튼을 클릭, 관련값 수정 페이지로 이동합니다. 이후 하단 예시와 같이 값을 입력해주고 update를 클릭하여 설정을 완료합니다.

     

    <그림 20> SAML2 Web SSO Configuration - Config 설정 예시

    항목명 변경사항
    Issuer https://saml.salesforce.com
    Assertion Consumer URL Salesforce SAML SSO Settings - Endpoints - Login URL
    ( 2-3-2. SAML-SSO 설정 참조 / ex. https://pharosinfo-dev-ed.my.salesforce.com )
    NameID Format 기본값 사용
    Enable Response Signing Selected
    Enable Attribute Profile Selected

     

     

     

    4. 실행

    이후 Assertion Consumer URL (ex. https://pharosinfo-dev-ed.my.salesforce.com) 로 접속하면, WSO2 로그인화면으로 리다이렉트 됩니다. 예시는 하단의 사진과 같습니다.

    <그림 21> 로그인 진행화면

    WSO2에서 admin ID로 생성했던 pharos@info.com으로 로그인하게 되면, Salesforce 콘솔 내에 등록되지 않은 계정이기 때문에 회원가입을 위한 필수정보를 입력받고, 이와 함께 Last Name / Email / Role을 WSO2의 회원정보를 참조하여 제공하게 됩니다. 위 절차가 종료되면 로그인이 진행되며, Salesforce의 콘솔화면이 나타나게 됩니다.

     

    이외에도 WSO2 로그인 화면에서 Create Account를 클릭, 다음과 같이 사용자를 생성 후 로그인할 수 있습니다.

     

    <그림 22> 계정 생성화면

    다음 화면에서 계정을 생성하면, 등록한 이메일로 계정 생성 확인 메일이 전송되는데, 해당 과정을 거쳐 생성된 계정으로도 로그인 할 수 있습니다. ** 이메일을 통한 계정생성을 위해서는 WSO2의 smtp 설정이 필수적입니다.

     

    <그림 23> 로그인 후 사용자 정보 창 예시

    참조. 인증서 생성

    crt 형식의 인증서 생성을 위해서는 사용하려는 도메인이 포함된 jks파일이 필요하기 때문에, 해당 과정은 jks 파일 생성 -> cer 파일 생성의 순으로 진행합니다.

     

    1. jks 파일 생성

    양식 : keytool -genkey -alias <설정할 alias 명> -keyalg RSA -keysize 2048-keystore <JKS 파일명>.jks -dname "CN=<hostname>, OU=<organizational_unit>,O=<organization>,L=<Locality>,S=<State/province>,C=<country_code>"-storepass <설정할 비밀번호> -keypass <비밀번호 확인> -ext SAN=<추가하려는 도메인> -ext ExtendedKeyUsage=serverAuth -validity 825
    
    
    예시 : keytool -genkey -alias newcert -keyalg RSA -keysize 2048 -keystore newkeystore.jks -dname "CN=wso2.my.com, OU=Is,O=Wso2,L=SL,S=WS,C=LK" -storepass wso2carbon -keypass wso2carbon -ext SAN=dns:wso2.my.com -ext ExtendedKeyUsage=serverAuth -validity 825

     

    2. cer 파일 생성

    양식 : keytool -export -alias <추가할 내부 인증서의 alias명> -file <생성할 파일명>.crt -keystore <참조할 파일명>.jks -storepass <참조할 인증서파일의 비밀번호>
    
    
    예시 : keytool -export -alias newcert -file wso2.crt -keystore newkeystore.jks -storepass wso2carbon

     

     

    5. 참고링크

     

    Logging in to Salesforce using the Identity Server - WSO2 Identity Server Documentation

    This is a regular expression to validate usernames. By default, strings have a length of 5 to 30. Only non-empty characters are allowed. You can provide ranges of alphabets, numbers and also ranges of ASCII values in the RegEx properties. [user_store]usern

    is.docs.wso2.com

     

    댓글

Designed by Tistory.