Diese Seite (Version-94) wurde zuletzt am 14-Feb.-2025 11:15 von Administrator geändert.

Diese Seite wurde am 09-Nov.-2024 16:04 von Administrator erstellt.

Du bist nicht autorisiert, diese Seite umzubenennen.

Du bist nicht autorisiert, diese Seite zu löschen.

Versionsgeschichte der Seite

Version Zuletzt geändert Größe Autor Änderungen Kommentar
94 14-Feb.-2025 11:15 13 KB Administrator zur vorherigen
93 31-Jan.-2025 13:04 13 KB Administrator zur vorherigen | zur neuesten
92 22-Jan.-2025 08:44 12 KB Administrator zur vorherigen | zur neuesten
91 06-Jan.-2025 14:30 12 KB Administrator zur vorherigen | zur neuesten
90 06-Jan.-2025 14:11 12 KB Administrator zur vorherigen | zur neuesten
89 06-Jan.-2025 14:01 12 KB Administrator zur vorherigen | zur neuesten
88 06-Jan.-2025 13:59 12 KB Administrator zur vorherigen | zur neuesten
87 06-Jan.-2025 13:31 12 KB Administrator zur vorherigen | zur neuesten
86 06-Jan.-2025 13:22 12 KB Administrator zur vorherigen | zur neuesten
85 06-Jan.-2025 13:08 12 KB Administrator zur vorherigen | zur neuesten
84 06-Jan.-2025 13:08 12 KB Administrator zur vorherigen | zur neuesten
83 06-Jan.-2025 11:51 12 KB Administrator zur vorherigen | zur neuesten
82 06-Jan.-2025 11:49 12 KB Administrator zur vorherigen | zur neuesten
81 06-Jan.-2025 11:44 12 KB Administrator zur vorherigen | zur neuesten

Links

Eingehende Links Ausgehende Links

Versionsunterschiede

Unterschiede zwischen Version und .

Zeile 23: 2 Zeilen hinzugefügt.
! How to connect to multiple SF instances
You can use below default configuration if you want to connect your SAP system to ONE SF instance only, otherwise you need to copy/adjust everything
Zeile 26: 8 Zeilen hinzugefügt.
When you create a configuration with x.OA2C_CONFIG you need to enable SAML2 with the "SAML2 2.0 Disabled" button.\\
You can also re-do that if you use button "<TRASHBIN> SAML 2.0 Settings" and and re-enable.\\
__First time and each time you re-enable SAML 2.0 a new certificate in STRUST at "SSF OAuth2 Client Identity Provider -Signature" is created.__\\
You cannot have multiple STRUST certificates for different SF instances (one for each instance), because SSF application OA2CS is hardcoded at class CL_OA2C_SAML20_METADATA->CHECK_SSF_APPLICATION_OA2C().\\
__The trick__ is to use the one and only STRUST certificate in all SF instances at "Manage OAuth2 Client Applications".
When you create a second OA2C_CONFIG configuration for the second instance, no new certificate at STRUST "SSF OAuth2 Client Identity Provider -Signature" is created!\\
This happens only if you re-enable SAML 2.0.
Zeile 29: Eine Zeile geändert.
* API Method, default GENERIC, SM30 > CLB2V_PTYPE_METH (copy default)
* API Method Version, default V1 and CL_CLB2_METHOD, SM30 > CLB2V_PTYPE_VERS (copy default)
* Server, default "SuccessFactors", SM34 > CLB2VC_PLATF_DEF to set server with url, provider, csfr + api version
Zeile 44: Eine Zeile hinzugefügt.
* Server Communication, default "SuccessFactors", SM34 > CLB2VC_PLATF, make sure to fill also the "Authentication Methods" like USER
Zeile 33: 5 Zeilen gelöscht.
* Server Communication, default "SuccessFactors", SM34 > CLB2VC_PLATF (SM30 > CLB2V_PLATF), make sure to fill also the "Authentication Methods" like USER
* Server, default "SuccessFactors", SM34 > CLB2VC_PLATF_DEF to set server with url, provider, csfr + api version
* Application Settings" for each instance with SM30 > CLB2V_APPL_DATA to set "Ext. Application ID" and Server
* Parameters for each instance with SM30 > CLB2V_APPL_EXT, here we have company_id
Zeile 40: 3 Zeilen gelöscht.
At "User E-Mail for SAML 2.0 Name ID" you can have the options specified at CL_OA2C_SAML20_ASSERTION->BUILD_NAME_ID().\\
By default the local SAP username is passed to SF, but SF expects a userId, so this will not work.\\
The only option which made sense to me is to use 998 and specify the userId as Alias at the SAP user.
Zeile 49: Eine Zeile hinzugefügt.
Client Secret: is mandatory, but does NOT matter here (use anything like xxx)
Zeile 48: Eine Zeile geändert.
User E-Mail for SAML 2.0 Name ID = see above (998)
User E-Mail for SAML 2.0 Name ID = 998 (see below)
Zeile 52: 8 Zeilen geändert.
! How to connect to multiple SF instances
When you create a configuration with x.OA2C_CONFIG you need to enable SAML2 with the "SAML2 2.0 Disabled" button.\\
You can also re-do that if you use button "<TRASHBIN> SAML 2.0 Settings" and and re-enable.\\
__First time and each time you re-enable SAML 2.0 a new certificate in STRUST at "SSF OAuth2 Client Identity Provider -Signature" is created.__\\
You cannot have multiple STRUST certificates for different SF instances (one for each instance), because SSF application OA2CS is hardcoded at class CL_OA2C_SAML20_METADATA->CHECK_SSF_APPLICATION_OA2C().\\
__The trick__ is to use the one and only STRUST certificate in all SF instances at "Manage OAuth2 Client Applications".
When you create a second OA2C_CONFIG configuration for the second instance, no new certificate at STRUST "SSF OAuth2 Client Identity Provider -Signature" is created!\\
This happens only if you re-enable SAML 2.0.
! SAML Subject Name Identifier (user) / Modification
This refers to OA2C_CONFIG at "User E-Mail for SAML 2.0 Name ID".\\
You can have the options specified at CL_OA2C_SAML20_ASSERTION->BUILD_NAME_ID().\\
By default the local SAP username is passed to SF, but SF expects a userId, so this will not work.\\
The only option which made sense to me is to use __998__ and specify the userId as Alias at the SAP user.\\
But you can have only the ALIAS only as upper case in SAP, so the SF userId must be uppercase too (or just numbers).\\
I modified the SAP code at CL_OA2C_SAML20_ASSERTION->BUILD_NAME_ID():
{{{
es_saml20_name_id-_value = to_lower( es_saml20_name_id-_value ).
}}}
Zeile 69: 37 Zeilen hinzugefügt.
! Create BAdIs, copy/adjust classes
Note: use always same case to avoid mixing up at all artifacts:
Profile, Type, Application ID, Service Provider Type, SSF ID, Server
{{{
CL_OA2C_SPECIFICS_DEFAULT
CL_OA2C_CONFIG_EXT_DEFAULT
(default) (custom)
Enh. Spot OA2C_SPECIFICS (not visible in OA2C_CONFIG)
Enh. Impl. SMI_OA2C_SPEC_SFSF (not visible in OA2C_CONFIG)
BAdI Def OA2C_SPECIFICS_BADI_DEF
BAdi Impl. SMI_OA2C_SPEC_SFSF_BIZX => Z_SMI_OA2C_SPEC_SFSF_BIZX_CD*
Filter Value: SUCCESSFACTORS => <Your_New_Filter>
Implementation Class: CL_SMI_OA2C_SPEC_SFSF => copied to ZCL_SMI_OA2C_SPEC_SFSF_CD
=> replace all references from class CL_SMI_OA2C_CONFIG_SFSF to ZCL_SMI_OA2C_CONFIG_SFSF_CD
=> edit method IF_OA2C_SPECIFICS~GET_CONFIG_EXTENSION (replace R_CONFIG_EXTENSION name)
*SE18 > es.OA2C_SPECIFICS
> Right-Click > Create implementation > ei.Z_SMI_OA2C_SPEC_SFSF_CD
> bi.Z_SMI_OA2C_SPEC_SFSF_BIZX_CD
> assign class from above and add filter
}}}
{{{
Enh. Spot OA2C_CONFIG_EXTENSION
Enh. Impl. SMI_OA2C_CONFIG_SFSF
BAdI Def OA2C_CONFIG_EXTENSION_BADI_DEF
BAdi Impl. SMI_OA2C_CONFIG_SFSF_BIZX
Filter Value: SUCCESSFACTORS
Implementation Class: CL_SMI_OA2C_CONFIG_SFSF => copied to ZCL_SMI_OA2C_CONFIG_SFSF_CD
=> update attributes GC_APPLICATION and GC_SMI_SP_SFSF
SE18 > es.OA2C_CONFIG_EXTENSION
> Right-Click > Create implementation > ei.Z_SMI_OA2C_CONFIG_SFSF_CD
> bi.Z_SMI_OA2C_CONFIG_SFSF_BIZX_CD
> assign class from above and add filter
}}}
Zeile 138: 4 Zeilen geändert.
FORM create_sf_application.
  DATA: ls_app         TYPE ssfapplic,
        ls_appt type SSFAPPLICT,
        lv_new_app_name TYPE string.
FORM create_sf_application.
  DATA: ls_app          TYPE ssfapplic,
        ls_appt         TYPE ssfapplict,
        lv_old_app_name TYPE string,
        lv_new_app_name TYPE string.
Zeile 143: 2 Zeilen geändert.
  delete from ssfapplic where applic = 'OA_CD'.
  delete from ssfapplict where applic = 'OA_CD'.
  lv_old_app_name = 'ZOACQ'.   " erase former custom ones, set blank if none
  lv_new_app_name = ''.
Zeile 146: 5 Zeilen geändert.
  lv_new_app_name = 'OACD'.
  SELECT SINGLE * FROM ssfapplic INTO ls_app WHERE applic = 'OA2CS'.
  ls_app-applic = lv_new_app_name.
  MODIFY ssfapplic FROM  ls_app.
  WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
  IF lv_old_app_name <> ''.
    DELETE FROM ssfapplic WHERE applic = lv_old_app_name.
    DELETE FROM ssfapplict WHERE applic = lv_old_app_name.
    WRITE: / |deleted { lv_old_app_name }, rc={ sy-subrc }|.
  ENDIF.
Zeile 152: 5 Zeilen geändert.
  SELECT SINGLE * FROM SSFAPPLICT INTO ls_appt WHERE sprsl = 'E' and applic = 'OA2CS'.
  ls_appt-applic = lv_new_app_name.
  ls_appt-descript = |OAuth2 Client Identity Provider - { lv_new_app_name }|.
  MODIFY SSFAPPLICT FROM  ls_appt.
  WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
  IF lv_new_app_name <> ''.
    SELECT SINGLE * FROM ssfapplic INTO ls_app WHERE applic = 'OA2CS'.
    ls_app-applic = lv_new_app_name.
    MODIFY ssfapplic FROM  ls_app.
    WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
    SELECT SINGLE * FROM ssfapplict INTO ls_appt WHERE sprsl = 'E' AND applic = 'OA2CS'.
    ls_appt-applic = lv_new_app_name.
    ls_appt-descript = |OAuth2 Client Identity Provider - { lv_new_app_name }|.
    MODIFY ssfapplict FROM  ls_appt.
    WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
  ENDIF.
Zeile 215: Eine Zeile hinzugefügt.
Zeile 162: 35 Zeilen gelöscht.
Note: use always same case to avoid mixing up at all artifacts:
Profile, Type, Application ID, Service Provider Type, SSF ID, Server
{{{
CL_OA2C_SPECIFICS_DEFAULT
CL_OA2C_CONFIG_EXT_DEFAULT
(default) (custom)
Enh. Spot OA2C_SPECIFICS (not visible in OA2C_CONFIG)
Enh. Impl. SMI_OA2C_SPEC_SFSF (not visible in OA2C_CONFIG)
BAdI Def OA2C_SPECIFICS_BADI_DEF
BAdi Impl. SMI_OA2C_SPEC_SFSF_BIZX => Z_SMI_OA2C_SPEC_SFSF_BIZX_CD*
Filter Value: SUCCESSFACTORS => <Your_New_Filter>
Implementation Class: CL_SMI_OA2C_SPEC_SFSF => copied to ZCL_SMI_OA2C_SPEC_SFSF_CD
=> exchange all references from class CL_SMI_OA2C_CONFIG_SFSF to ZCL_SMI_OA2C_CONFIG_SFSF_CD
=> edit method IF_OA2C_SPECIFICS~GET_CONFIG_EXTENSION (replace R_CONFIG_EXTENSION name)
*SE18 > es.OA2C_SPECIFICS
> Right-Click > Create implementation > ei.Z_SMI_OA2C_SPEC_SFSF_CD
> bi.Z_SMI_OA2C_SPEC_SFSF_BIZX_CD
> assign class from above and add filter
}}}
{{{
Enh. Spot OA2C_CONFIG_EXTENSION
Enh. Impl. SMI_OA2C_CONFIG_SFSF
BAdI Def OA2C_CONFIG_EXTENSION_BADI_DEF
BAdi Impl. SMI_OA2C_CONFIG_SFSF_BIZX
Filter Value: SUCCESSFACTORS
Implementation Class: CL_SMI_OA2C_CONFIG_SFSF => copied to ZCL_SMI_OA2C_CONFIG_SFSF_CD
=> update attributes GC_APPLICATION and GC_SMI_SP_SFSF
SE18 > es.OA2C_CONFIG_EXTENSION
> Right-Click > Create implementation > ei.Z_SMI_OA2C_CONFIG_SFSF_CD
> bi.Z_SMI_OA2C_CONFIG_SFSF_BIZX_CD
> assign class from above and add filter
}}}
Zeile 227: 2 Zeilen hinzugefügt.
* with transaction OA2C_GRANT you can create/delete tokens (for your own user only)
* tokens are stored at table OA2C_TOKEN_ADM (and OA2C_TOKEN_SCOPE, not used here). You can delete records here to force re-authentication
Zeile 212: Eine Zeile geändert.
To re-authenticate you can potentially use CL_OA2C_CLIENT->DELETE_TOKENS() or use r.OA2C_GENERIC_ACCESS.
To re-authenticate delete records at OA2C_TOKEN_ADM (or use CL_OA2C_CLIENT->DELETE_TOKENS()?)
Zeile 271: 2 Zeilen hinzugefügt.
OR
* you have a mismatch in the codes/attributes in the custom classes of the two BAdIs
Zeile 288: 3 Zeilen hinzugefügt.
! 400 - Parameter "company_id" is required in the OAuth request
You haven't created the BAdIs and copied/adopted the classes to provide
Zeile 293: 6 Zeilen hinzugefügt.
! HTTPIO_ERROR_OA2C_NO_SECRET
=> OA2C_CONFIG > Edit and re-enter the client secret > Save
! Direct connect to <server> failed: NIECONN_REFUSED(-10)
=> network / proxy issue, see [note 3518358|https://me.sap.com/notes/3518358/E]