서버와 서버의 통합을 위한 OAuth 2.0 JWT 로드 스트리밍

Salesforce는 CRM 아닌가요?왜 Salesforce와 JWT에 대해 이야기합니까?



정확히 말하면Salesforce는 CRM이자 신뢰할 수 있는 개발자가 우호적이고 완전히 유연한 플랫폼으로 거의 모든 제3자 시스템, 데이터베이스와 응용 프로그램과의 통합을 지원한다.

네, 좋아요.왜 JWT야?다른 권한 수여 흐름도 사용할 수 있다.


웹 서버 흐름과 같은 다른 유형의 주류 권한 수여 흐름에 대해 사용자가 현장에서 인증을 해야 합니다.
때때로 사용자는 서버가 정보를 교환할 때마다 상호작용으로 로그인하지 않고 데이터에 접근할 수 있는 권한을 부여하기를 원합니다.
이러한 경우 OAuth 2.0 JSON Web 토큰(JWT) 캐리어 스트림을 사용할 수 있습니다.

근데 어떻게 하지?


이 흐름은 인증서를 사용하여 JWT 요청에 서명합니다. 사용자 상호작용이 필요하지 않습니다.
그러나 이 절차는 클라이언트 응용 프로그램의 승인을 미리 받아야 한다.

요컨대, 이것은 어떻게 일합니까?


클라이언트(salesforce 데이터에 액세스하려는 사용자)가 JWT를 Salesforce OAuth 토큰 엔드포인트로 보냅니다.
Salesforce는 디지털 서명을 포함하여 JWT를 처리하고 방문 영패(app의 사전 승인에 따라)를 발표한다.

좋아요!두 Salesforce 조직 간의 간단한 예를 살펴보겠습니다.


OrgA의 Visualforce 탭은 클라이언트 애플리케이션으로 사용됩니다.


OrgB는 대상 salesforce 서버로 사용되며 이 서버에서 권한을 부여받고 데이터를 가져와야 합니다.


게시물에서 OrgA와 OrgB라고 부릅니다.
클라이언트 응용 프로그램을 봅시다. (비주얼 포스 페이지 옵션 카드입니다.)

이 페이지에 있는 Fetch JWT Token 버튼을 클릭하면access Token과 저희의alesforce OrgB(or)가 발표한 다른 파라미터, 예를 들어 돋보이는 "https://oceans11-dev-ed.my.salesforce.com"를 볼 수 있습니다.

우리 지금 코드에 대해 이야기합시다.


간단하게 보기 위해서 나는 절차를 6단계로 나눈다.

  • JWT 생성
  • 인증서와 개인 키를 만듭니다.
  • 대상 OrgB
  • 의 연결된 애플리케이션에 인증서 업로드
  • 고객 OrgA
  • 의 파일에 개인 키를 업로드
  • 액세스 토큰 요청
  • Salesforce 액세스 토큰
  • 1. JWT 만들기


    JWT는 JSON 웹 토큰입니다.그것은 제목과 성명으로 구성되어 있다.
    JWT 머리는 이렇게 해야 돼요.
    {"alg":"RS256"}
    
    alg - algorithm you are using그것은 우선 클레임으로 구성되어 있는데, 아마도 이런 격식일 것이다.
    {
    "iss": "3MVG99OxTyEMCQ3gNp2PjkqeZKxnmAiG1xV4oHh9AKL_rSK.BoSVPGZHQ
    ukXnVjzRgSuQqGn75NL7yfkQcyy7", 
    "sub": "[email protected]", 
    "aud": "https://login.salesforce.com", 
    "exp": "1333685628"
    }
    
    여기 뭐가 있는지 보자...이것들은 JWT 클레임이라고 불린다.iss - OAuth client_id sub - username of the target org you are connecting to aud - url you would want to connect. if thats a sandbox then use test instead of login. exp - time to expire the token.JWT 헤더와 인코딩된 JWT 성명집을 각각 Base64url 인코딩해야 하며, 줄 바꿈 문자가 없습니다.
    다음에 인코딩된 JWT 헤더와 이 형식으로 설정된 인코딩된 JWT 성명에 문자열을 만듭니다
    Encoded JWT Header+ "." + Encoded JWT Claims
    
    얘가 이렇게 보여요.우리는 인코딩 형식의 제목이 있다)
    eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su
    Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZ1NjI4In0=
    

    Please refer to generateJsonBody and combineJWTHeader_Claimset method for the logic using apex code provided in the Git Repo link at the end of this post.


    이제 JWT 성명과 제목이 나왔습니다. 2단계를 보도록 하겠습니다.

    2. 인증서와 개인 키를 만듭니다.


    이 흐름은 디지털 인증서와 인증서에 서명할 개인 키가 필요합니다.
    개인 키와 인증 기관에서 발급한 인증서를 마음대로 사용하십시오.
    또는 OpenSSL을 사용하여 키와 자체 서명된 디지털 인증서를 만들 수 있습니다.
    Refer this on How to create a Digital Certificate
    일단 당신이 이 단계를 완성하면,

    3. 대상 조직의 연결된 애플리케이션에 인증서 업로드


    이 디지털 인증서를 OrgB의 연결된 응용 프로그램에 업로드해야 합니다. 이 또한 JWT에서 승인 흐름을 호스팅하는 데 필요합니다.

    4. 클라이언트 OrgA 파일에 개인 키 업로드



    액세스 토큰을 위한 올바른 로드 생성
    자가 서명 개방 ssl 인증서를 만들 때 얻은 개인 키 파일을 가지고 있기 때문에 요청에 서명합니다
    이것은 alesforce 조직이기 때문에, 나는 그것을 파일에 업로드하고, ContentVersion 대상을 사용하여 그것을 검색한다.
    RSA SHA256을 사용하여 결과 문자열에 서명합니다.
    다음 형식으로 이 단계의 문자열을 만듭니다.
    the combined JWT string + "." + base64_encoded_signature
    

    See retrievePKContent and signPkey method from the Git repo link which


    base64 인코딩의 서명은 이렇습니다. (내용을 비교적 작게 편집했습니다.)
    eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su
    Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZ1NjI4In0=.iYCthqWCQucwi35yFs-nWNgpF5NA_a46fXDTNIY8ACko6BaEtQ9E6h4Hn1l_pcwcK​
    I_GlmfUO2dJDg1A610t09TeoPagJsZDm_H83bsoZUoI8LpAA1s-2a​
    36y2L2Bh7M8TNWiKa_BNM6s1FNKDAwHEWQrNtAeReXgRy0MZgQY2rZtqT2FcDyjY3JVQb​
    En_CSjH2WV7ZlUwsKHqGfI7hzeEvVdfOjH9NuaJozxvhPF489IgW6cntPuT2V647JWi7ng
    

    5. 방문 영패를 요청한다.


    다음에 전체 Base64 인코딩 문자열을 얻은 후, 이 예에서 목표 조직의 ORGB의 영패 단점을 호출합니다.
    끝점은 이렇게 해야 돼요.
    https://login.salesforce.com/services/oauth2/token?grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion='+YOUR-ENTIRE-JWT-VALUE STRING YOU PREPARED '
    
    이것은 우편으로 부치는 전화일 것이다.

    6. Salesforce는 액세스 토큰을 수여합니다.


    일단 완성되면, 모든 것이 정확하게 배치되면, 방문 영패가 있는 응답을 볼 수 있을 것입니다.
    위의 Visualforce 페이지를 보면 다음과 같은 결과를 얻을 수 있습니다.

    만약 당신이 그림을 관찰한다면, 나는 방문 영패를 받았습니다. 나는 모든 역할 영역을 볼 수 있습니다. id는 사용자 id와 조직 id에 대응합니다
    그리고 싣는 영패 유형으로
    이 토큰을 사용하면 목표 조직의 데이터에 쉽게 접근할 수 있습니다
    GIT Link HERE에서 전체 코드를 찾으십시오.
    변경 사항을main에 제출하지 마십시오.
    이 글은alesforce를 통해 JWT를 이해하거나 JWT를 실현하려는 사람들에게 도움을 줄 수 있기를 바랍니다.
    새 댓글 안녕히 계세요.

    좋은 웹페이지 즐겨찾기