access_token 발급받기

생성된 Token으로 Salesforce에 인증 요청을 하기 위하여 아래의 코드를 Auth 모듈에 추가합니다.

def getAuth(consumerKey, loginUrl, loginUser, privateKey):
    try:
        token = getToken(consumerKey, loginUrl, loginUser, privateKey)
        url = loginUrl + "/services/oauth2/token"
        kwarg = {
            'data' : {
                'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
                'assertion': token,
            }
        }
        
        print('Making OAuth request...')
        # result = requests.post(url, data)
        result = requests.request('POST', url, **kwarg)
        
        if(result.status_code == 200):
            obj = result.json()
            connInfo = {
                'instanceUrl' : obj['instance_url'],
                'accessToken' : obj['access_token']
            }
            return connInfo
        return None
    except Exception as e:
        print('Exception -> ', e)
  • grant_type : 인증으로 요청하는 형식입니다.

sample.py 파일의 main 메소드를 아래와 같이 수정하고 터미널에서 python sample.py를 실행해 봅니다.

def main():
    
    consumerKey = "3MVG9YDQS5WtC11q60F............QYX68awYhUzKVMMB"
    loginUrl    = "https://login.salesforce.com/"
    loginUser   = "username@example.com"

    privateKey = Auth.getPrivateKeyFromFile("company.key")

    connInfo = Auth.getAuth(consumerKey, loginUrl, loginUser, privateKey);
    print(json.dumps(connInfo, indent=2))

아래와 같은 문자열이 표시되면 정상적으로 access_token을 발급받은 것입니다.

{
  "instanceUrl": "https://****.my.salesforce.com",
  "accessToken": "00D***********!********************************"
}

인증 절차가 정상적으로 동작하므로, Salesforce의 데이터 조작을 위하여 sample.py의 내용을 아래와 같이 정리를 합니다.

import Auth
import Database
import json
import textwrap
import urllib.parse

def main():
    try:
        connInfo = getAuth()
        print(json.dumps(connInfo, indent=2))

        # Data function block begin
        
        # Data function block end
        
    except Exception as e:
        print('Exception -> ', e)

def getAuth():
    
    consumerKey = "3MVG9YDQS5WtC11q60F............QYX68awYhUzKVMMB"
    loginUrl    = "https://login.salesforce.com/"
    loginUser   = "username@example.com"

    privateKey = Auth.getPrivateKeyFromFile("company.key")
    # privateKey = Auth.getPrivateKeyFromJKS("company.jks", "company", "password")
    # privateKey = textwrap.dedent("""
    # -----BEGIN PRIVATE KEY-----
    # MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDN4c80VU9yjbAu
    # JWq3RYPBsLnP2wcipVdGIzPYLqyXUq2GBlhyaLjN0NI5mO+AyXE8FSJtD/Y22ILQ
    # ...
    # ...
    # h3opCCYABa+qE5dHiCDJEKuZfpDNUnIeKGUlUeOvE05JLs2nBXS+w6s3ACpxeoNE
    # Qmh4OV5ZHXwx5R6ffAOAwAY=
    # -----END PRIVATE KEY-----
    # """).encode()

    connInfo = Auth.getAuth(consumerKey, loginUrl, loginUser, privateKey);
    
    return connInfo



main()

터미널에서 python sample.py를 실행하여 Access Token 과 Instance Url의 값이 표시되는지 확인해 봅니다.