{
“endpoints”: {
“api”: “https://spa-api-gateway-bpi-eu-prod.cfapps.eu10.hana.ondemand.com”
},
“html5-apps-repo”: {
“app_host_id”: “a1b2c3d4-e5f6-7g8h-i9j0-k1l2m3n4o5p6,q7r8s9t0-u1v2-w3x4-y5z6-a7b8c9d0e1f2,g3h4i5j6-k7l8-m9n0-o1p2-q3r4s5t6u7v8,w9x0y1z2-a3b4-c5d6-e7f8-g9h0i1j2k3l4”
},
“saasregistryenabled”: true,
“sap.cloud.service”: “com.sap.spa.processautomation”,
“sap.cloud.service.alias”: “spa”,
“uaa”: {
“clientid”: “aBcDeFgH-IjKl-MnOp-QrSt-UvWxYz123456”,
“clientsecret”: “AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdefGhIjKlMnOpQrStUvWxYz”,
“url”: “https://randomzone1234.authentication.eu10.hana.ondemand.com”,
“identityzone”: “randomzone1234”,
“identityzoneid”: “abcd1234-efgh-5678-ijkl-90mnopqrstuv”,
“tenantid”: “wxyz5678-abcd-1234-efgh-90mnopqrstuv”,
“tenantmode”: “shared”,
“sburl”: “https://internal-xsuaa.authentication.eu10.hana.ondemand.com”,
“apiurl”: “https://api.authentication.eu10.hana.ondemand.com”,
“verificationkey”: “—–BEGIN PUBLIC KEY—–nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr+An9r5+9MI5Jp0+sIcTnijGDdGlRnOKXeEK1Dk1PuYGqohTORJRFtMDfZE+OnVnW8CbcP4iSogMECkVEwn2wnutCg57/txD4NcSwU25d9uUwsWKjw3TiGpvwJDBOm291FpCRABqD9W2kiw4PxL9d4nVHQrK0dhczC/sgN67zLB80BwvJNv2VUY09R+6gNPiTiwO1CA5sHcRUzdIOikuXqWn8/TFKvRd4Qq1Gem2LwJ9WwnW4b9Njzs3jZwBCCMqWXy02YYJd/m2UHa/iSIAy3kJndetODMJ/209uPH+FIOrtrqwW0cQ0BvnMZ4RWXBcvbc+hnkqVJ+YPwT6/D8Dd3u5Kn8QIDAQABn—–END PUBLIC KEY—–“,
“xsappname”: “11f3c240-ce16-4b66-ade6-52310b90b2b7!b141614|xsuaa!b120249”,
“subaccountid”: “mnopqr12-stuv-3456-wxyz-7890abcdefghij”,
“uaadomain”: “authentication.eu10.hana.ondemand.com”,
“zoneid”: “ijkl5678-mnop-1234-abcd-90qrstuvwxyz”,
“credential-type”: “binding-secret”,
“serviceInstanceId”: “qrstuvwx-1234-yzab-cdef-ghijklmnopqr”
}
}
注)これは例のために乱数を用いて書き換えてありますのでそのまま入力しても動きません。
メソッドとしてはGETを使用し、URLの欄にはサービスキーのJSONのuaa.urlを貼り付けます。
そして、このURLに”/oauth/token”を付与してください。
ParamにはKeyとしてgrant_type、Valueとしてclient_credentialsを設定します。(これによりURLの欄には?grant_type=client_credentialsが追加されます。)
AuthorizationではAuthTypeとしてBasic Authentication、Usernameとしてサービスキーのuaa.clientid、Passwordとしてuaa.clientsecretを設定します。
これでSendボタンをクリックすると、下記のような項目が返されます。
このaccess_tokenの値がAPIにアクセスする際に必要なトークンです。
さて、ここからが意外と情報がないなと思ったところの解説ですが、上記のトークンはサービスキーのclientidとclientsecretの情報から作成されたトークンです。そのためこのトークンはアクセスするサービスのシステムユーザーのようなユーザーで作られたトークンとなります。例えばこの方法でSAP Build Process AutomationのAPIを使用するためのトークンを取得し、ワークフロープロセスを開始するAPIを実行すると、プロセスはsb-clonexxxxxxというシステムユーザーで開始されます。
トークンにはユーザーの情報が含まれ、実際のAPI実行時にはそのユーザーに割り当てられたロールコレクションにより実行できる・出来ないや返される情報が変化することがあります。そのためテストでもユーザー情報を含んだトークンを取得したいところです。
トークンを取得する際にユーザーの情報を含めたい場合は以下のようにします。
まず、メソッドとしてPOSTを指定します。その他のclientidとclientsecret等の値はx-www-form-urlencodedを指定したBODYで指定します。grant_typeとしてpasswordを指定し、usernameとpasswordにそのユーザーのユーザー名とパスワードを入力します。これで返されるトークンはそのユーザーの情報が含まれる形になります。
このとき、ユーザー名とパスワードによる認証はdefault Idpにより行われます。
上記スナップショットのようにBTPサブアカウントにcustom Idpを設定している状態で、username/passwordによる認証をcustom Idpの方で行いたい場合は
このようにKeyにlogin_hint、Valueに{“origin”:”sap.custom”}を追加します。valueの中身のsap.customはBTP CockpitのSecurity->Trust ConfigurationでOrigin Keyとして表示されている値です。使用したいIdPのOrigin Keyを設定してください。それによりそのIdPで認証が行われます。
キーを取得すればAPIを使用できます。
URLやHTTPメソッドはSAP Business Accelerator Hubに記載がありますのでそれに従います。
重要なのがAuthorizationでAuthTypeとしてBearerを指定し、そこに先程までの手順で取得したトークンを入力することです。これでAPIを実行することが出来ます。
custom Idpのユーザーを使用しての接続方法が意外と公開されていないなと思ったので公開しておきます。テストに役立ててください。
何名かの方が似たようなことを解説していますが、それらを見てもあまり掲載されていないパターンについても備忘録として書いておきたいと思います。 SAP BTPでは大半のAPIはOAuth2.0の認証を経由して扱います。大凡のサービスでは1.サービスのインスタンスを作成する2.サービスキーを発行するという作業を行うことで、2で発行されたサービスキーの中にAuth2,0のトークン取得に必要な情報が含まれます。これらの作業はブースターでサービスをセットアップした場合、ブースターによって自動で行われることがあります。例えばSAP Build Process Automationの場合はブースターによるセットアップでsap_process_automationというインスタンスが作成され、サービスキーも作成されます。サービスキーの中身は以下のようになるかと思います。{
“endpoints”: {
“api”: “https://spa-api-gateway-bpi-eu-prod.cfapps.eu10.hana.ondemand.com”
},
“html5-apps-repo”: {
“app_host_id”: “a1b2c3d4-e5f6-7g8h-i9j0-k1l2m3n4o5p6,q7r8s9t0-u1v2-w3x4-y5z6-a7b8c9d0e1f2,g3h4i5j6-k7l8-m9n0-o1p2-q3r4s5t6u7v8,w9x0y1z2-a3b4-c5d6-e7f8-g9h0i1j2k3l4”
},
“saasregistryenabled”: true,
“sap.cloud.service”: “com.sap.spa.processautomation”,
“sap.cloud.service.alias”: “spa”,
“uaa”: {
“clientid”: “aBcDeFgH-IjKl-MnOp-QrSt-UvWxYz123456”,
“clientsecret”: “AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdefGhIjKlMnOpQrStUvWxYz”,
“url”: “https://randomzone1234.authentication.eu10.hana.ondemand.com”,
“identityzone”: “randomzone1234”,
“identityzoneid”: “abcd1234-efgh-5678-ijkl-90mnopqrstuv”,
“tenantid”: “wxyz5678-abcd-1234-efgh-90mnopqrstuv”,
“tenantmode”: “shared”,
“sburl”: “https://internal-xsuaa.authentication.eu10.hana.ondemand.com”,
“apiurl”: “https://api.authentication.eu10.hana.ondemand.com”,
“verificationkey”: “—–BEGIN PUBLIC KEY—–nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr+An9r5+9MI5Jp0+sIcTnijGDdGlRnOKXeEK1Dk1PuYGqohTORJRFtMDfZE+OnVnW8CbcP4iSogMECkVEwn2wnutCg57/txD4NcSwU25d9uUwsWKjw3TiGpvwJDBOm291FpCRABqD9W2kiw4PxL9d4nVHQrK0dhczC/sgN67zLB80BwvJNv2VUY09R+6gNPiTiwO1CA5sHcRUzdIOikuXqWn8/TFKvRd4Qq1Gem2LwJ9WwnW4b9Njzs3jZwBCCMqWXy02YYJd/m2UHa/iSIAy3kJndetODMJ/209uPH+FIOrtrqwW0cQ0BvnMZ4RWXBcvbc+hnkqVJ+YPwT6/D8Dd3u5Kn8QIDAQABn—–END PUBLIC KEY—–“,
“xsappname”: “11f3c240-ce16-4b66-ade6-52310b90b2b7!b141614|xsuaa!b120249”,
“subaccountid”: “mnopqr12-stuv-3456-wxyz-7890abcdefghij”,
“uaadomain”: “authentication.eu10.hana.ondemand.com”,
“zoneid”: “ijkl5678-mnop-1234-abcd-90qrstuvwxyz”,
“credential-type”: “binding-secret”,
“serviceInstanceId”: “qrstuvwx-1234-yzab-cdef-ghijklmnopqr”
}
}
注)これは例のために乱数を用いて書き換えてありますのでそのまま入力しても動きません。まず、これらの情報を用いてトークンを取得することが必要です。これはPOSTMANでは以下のようにして行います。メソッドとしてはGETを使用し、URLの欄にはサービスキーのJSONのuaa.urlを貼り付けます。そして、このURLに”/oauth/token”を付与してください。ParamにはKeyとしてgrant_type、Valueとしてclient_credentialsを設定します。(これによりURLの欄には?grant_type=client_credentialsが追加されます。)AuthorizationではAuthTypeとしてBasic Authentication、Usernameとしてサービスキーのuaa.clientid、Passwordとしてuaa.clientsecretを設定します。これでSendボタンをクリックすると、下記のような項目が返されます。このaccess_tokenの値がAPIにアクセスする際に必要なトークンです。さて、ここからが意外と情報がないなと思ったところの解説ですが、上記のトークンはサービスキーのclientidとclientsecretの情報から作成されたトークンです。そのためこのトークンはアクセスするサービスのシステムユーザーのようなユーザーで作られたトークンとなります。例えばこの方法でSAP Build Process AutomationのAPIを使用するためのトークンを取得し、ワークフロープロセスを開始するAPIを実行すると、プロセスはsb-clonexxxxxxというシステムユーザーで開始されます。トークンにはユーザーの情報が含まれ、実際のAPI実行時にはそのユーザーに割り当てられたロールコレクションにより実行できる・出来ないや返される情報が変化することがあります。そのためテストでもユーザー情報を含んだトークンを取得したいところです。トークンを取得する際にユーザーの情報を含めたい場合は以下のようにします。まず、メソッドとしてPOSTを指定します。その他のclientidとclientsecret等の値はx-www-form-urlencodedを指定したBODYで指定します。grant_typeとしてpasswordを指定し、usernameとpasswordにそのユーザーのユーザー名とパスワードを入力します。これで返されるトークンはそのユーザーの情報が含まれる形になります。このとき、ユーザー名とパスワードによる認証はdefault Idpにより行われます。上記スナップショットのようにBTPサブアカウントにcustom Idpを設定している状態で、username/passwordによる認証をcustom Idpの方で行いたい場合はこのようにKeyにlogin_hint、Valueに{“origin”:”sap.custom”}を追加します。valueの中身のsap.customはBTP CockpitのSecurity->Trust ConfigurationでOrigin Keyとして表示されている値です。使用したいIdPのOrigin Keyを設定してください。それによりそのIdPで認証が行われます。キーを取得すればAPIを使用できます。URLやHTTPメソッドはSAP Business Accelerator Hubに記載がありますのでそれに従います。重要なのがAuthorizationでAuthTypeとしてBearerを指定し、そこに先程までの手順で取得したトークンを入力することです。これでAPIを実行することが出来ます。custom Idpのユーザーを使用しての接続方法が意外と公開されていないなと思ったので公開しておきます。テストに役立ててください。 Read More Technology Blogs by SAP articles
#SAP
#SAPTechnologyblog