HMAC 암호화(HMACSHA256) 소스코드
CL_APL_TESTZONE_SERVICES=>CONVERT_ABAP_TIMESTAMP_TO_JAVA
CL_APL_ECATT_JSERVICES=>CONVERT_ABAP_TIMESTAMP_TO_JAVA
CL_ABAP_HMAC=>CALCULATE_HMAC_FOR_CHAR
네이버클라우드(Ncloud)
SAP에서 네이버클라우드(Ncloud)의 API를 호출하기 위해서는 "x-ncp-apigw-signature-v2" 부분에 HMAC 알고리즘을 이용한 암호화 값을 넣어줘야 정상적인 호출이 가능합니다.
Ncloud(https://api.ncloud-docs.com/docs/common-ncpapi) 에서 제공하는 가이드와 SAP의 Class Method와 Function을 이용하여 Timestamp를 구하고 HMACSHA256으로 암호화 및 Base64 인코딩까지 하는 소스코드 예시를 작성하였습니다.
#1. 네이버클라우드(Ncloud) API 호출시 헤더형식 및 시그니처 생성 가이드
#2. 소스코드
CL_APL_TESTZONE_SERVICES 클래스는 고객사 SAP 환경에 따라 없을 수 있습니다.
이경우, CL_APL_ECATT_JSERVICES 클래스를 사용하시면 됩니다.
DATA: LV_METHOD TYPE STRING,
LV_URL TYPE STRING,
LV_ACCESSKEY TYPE STRING,
LV_SECRETKEY TYPE STRING.
LV_METHOD = 'GET'.
LV_URL = '/photos/puppy.jpg?query1=&query2'.
LV_ACCESSKEY = 'D78BB444D6D3C84CA38D'.
LV_SECRETKEY = 'FsCwKN92Ob0SsTWdaZOPzKo6ZGSrmjt2nBk1a2jH'.
*1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)
"CL_APL_ECATT_JSERVICES 클래스가 없으면 CL_APL_TESTZONE_SERVICES 사용
CL_APL_ECATT_JSERVICES=>CONVERT_ABAP_TIMESTAMP_TO_JAVA(
exporting
IM_DATE = SY-DATUM " Date Data Element for SYST
IM_TIME = SY-UZEIT " Date and Time, Current Application Server Time
* IM_MSEC = 000 " Remaining Milliseconds
importing
EX_TIMESTAMP = DATA(LV_TIMESTAMP) " Time in Milliseconds since January 1, 1970, 00:00:00 GMT
).
CONCATENATE LV_METHOD
` `
LV_URL
CL_ABAP_CHAR_UTILITIES=>NEWLINE
LV_TIMESTAMP
CL_ABAP_CHAR_UTILITIES=>NEWLINE
LV_ACCESSKEY INTO DATA(LV_DATA).
CL_ABAP_HMAC=>CALCULATE_HMAC_FOR_CHAR(
EXPORTING
IF_ALGORITHM = 'SHA256'
IF_KEY = CL_BCS_CONVERT=>STRING_TO_XSTRING( LV_SECRETKEY )
IF_DATA = LV_DATA
IMPORTING
EF_HMACSTRING = DATA(LV_HMACSTRING)
EF_HMACXSTRING = DATA(LV_HMACXSTRING)
EF_HMACB64STRING = DATA(LV_HMACB64STRING)
).
CL_DEMO_OUTPUT=>NEW(
)->NEXT_SECTION( 'Original string'
)->WRITE( LV_DATA
)->NEXT_SECTION( 'HMACSHA256 encrypted string'
)->WRITE( LV_HMACSTRING
)->WRITE( LV_HMACXSTRING
)->WRITE( LV_HMACB64STRING
)->NEXT_SECTION( 'Base64 Encoded string'
)->WRITE( CL_HTTP_UTILITY=>ENCODE_BASE64( LV_HMACSTRING )
)->WRITE( CL_HTTP_UTILITY=>ENCODE_X_BASE64( LV_HMACXSTRING )
)->WRITE( CL_HTTP_UTILITY=>ENCODE_BASE64( LV_HMACB64STRING )
)->DISPLAY( ).
'ABAP > 소스코드' 카테고리의 다른 글
[Class] Progress Indicator 처리용 Common Class (0) | 2023.05.24 |
---|---|
[Report] Client copy 후 번호범위 자동 조정 프로그램 (1) | 2023.05.24 |
[Include] Progress Indicator 처리용 Common Include (0) | 2023.05.10 |
[SAP/Report] Table/Structure 의 필드 리스트 조회 (2) | 2023.05.07 |
[SAP/User-Exit] 회사코드 탐색 도움말 불필요 항목 제외처리 (0) | 2023.05.07 |
댓글