Veeva CRM の代理認証

  • iPad
  • iPhone

Veeva CRM は、代理認証またはシングルサインオン (SSO) をサポートしているため、ユーザがサードパーティの認証情報で Veeva CRM にサインインすることができます。お客様は、アイデンティティプロバイダ (IDP; 例: Okta または PingFederate) で代理認証エンドポイントを設定する必要があります。

Salesforce で代理認証を設定するには:

  1. シングルサインオン設定に進みます。
  2. 編集を選択します。
  3. Salesforce 認証情報によるログインを無効にするを選択します。
  4. 保存を選択します。
  5. 編集を選択します。
  6. IDP の代理認証エンドポイントの URL を代理ゲートウェイ URL フィールドに入力します。
  7. 保存を選択します。
  8. 適切なエンドユーザプロファイルに進みます。
  9. 編集を選択します。
  10. 管理者権限で Is Single Sign-On Enabled のチェックボックスを選択します。

この図では、情報のフローはオフラインデバイスにユーザ名とパスワードを入力するところから始まります (iPad または Windows)。この認証情報は、その後アイデンティティプロバイダに送信され、そこから Salesforce ユーザ名とトークンが返されます。これは Vod サーバに送信された後、SFDC に送信されます。SFDC により、ユーザの SSO が有効化されていることが確認されると、SFDC は代理認証エンドポイントに認証情報を転送します。代理認証エンドポイントは、資格を確認し、Yes/No のいずれかを回答します。回答に応じて、オフラインデバイスは回答を受け取り、ユーザをログインさせるか、エラーを送信します。

トークン認証の使用

セキュリティを強化するため、お客様は、代理認証に加えてセキュリティトークンサービス (STS) を実装することができます。STS を実装すると、パスワードはお客様が管理するエンドポイントにしか送信されなくなります。

STS が実装されている場合、ユーザが Veeva CRM アプリにサインインすると、最初にユーザ名とパスワードがお客様がホストする STS に送信され、そこからトークンが Veeva CRM に返されます。次に Veeva CRM はユーザ名とトークンを使用して、Salesforce と代理認証エンドポイントでサインインを検証します。お客様は、エンドポイントを設定して、ユーザ名とパスワードではなく、ユーザ名とトークンを認証する必要があります。

Veeva CRM アプリとお客様の STS 間の認証交換は、SOAP ウェブサービスおよび WS-Trust 規格に基づきます。Veeva CRM はリクエストセキュリティトークン (RST) メッセージを STS に送信して、リクエストセキュリティトークン応答 (RSTR) メッセージを受け取ります。セキュリティトークンは、応答メッセージから抽出され、検証のために Salesforce に渡されます。

WS-Trust に関するドキュメントは OASIS オープンスタンダードウェブサイト (https://www.oasis-open.org/standards/#wstrustv1.3) にあり、以下の情報が含まれます:

情報の交換を以下のダイアグラムに示します:

所属組織で Veeva CRM for iPad に STS で代理認証を有効にするには:

  1. WS-Trust ベースでリクエストセキュリティトークン (RST) メッセージを受信し、リクエストセキュリティトークン応答 (RSTR) メッセージを返すことのできるセキュリティトークンサービス (STS) を実装します。
  2. 所属組織で Salesforce の代理認証が有効化されていることを確認します。
  3. MDM を、RST と RSTR メッセージのエンドポイント URL と、Salesforce で設定された代理ゲートウェイ URL で設定します。どちらの URL もインターネット経由でアクセスできる必要があります。詳しくは、MDM 経由での Veeva CRM の代理認証をご覧ください。

以下は、Veeva CRM がお客様によって指定されたエンドポイント URL で STS に送信する RST の一例です。

<?xml version="1.0"?>

<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

<soapenv:Header>

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">

<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

<wsu:Created>2012-02-17T09:37:28.098Z</wsu:Created>

<wsu:Expires>2012-02-17T19:37:28.098Z</wsu:Expires>

</wsu:Timestamp>

<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="usernameToken">

<wsse:Username>salesforce_username@customer.org</wsse:Username>

<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">corp_directory_password</wsse:Password>

</wsse:UsernameToken>

</wsse:Security>

<wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</wsa:Action>

</soapenv:Header>

<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

<wst:RequestSecurityToken xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512/">

<wst:TokenType/>

<wst:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</wst:RequestType>

<wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">

<wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing">

<wsa:Address>http_endpoint_url_for_step_5</wsa:Address>

</wsa:EndpointReference>

</wsp:AppliesTo>

<wst:Claims/>

<wst:OnBehalfOf>

<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

<wsse:Reference URI="usernameToken" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"/>

</wsse:SecurityTokenReference>

</wst:OnBehalfOf>

</wst:RequestSecurityToken>

</soapenv:Body>

</soapenv:Envelope>

以下は、Veeva CRM が STS から返信を待つ RSTR の一例です。セキュリティトークン全体は、エンコード方式が base64 のメッセージから抽出され、CRM によって送信されたサインイン要求により Salesforce に送信されます。

<S11:Envelope xmlns:S11="http://schemas.xmlsoap.org/soap/envelope/">

<S11:Header>

<add:To xmlns:add="http://www.w3.org/2005/08/addressing">

http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</add:To>

<add:Action xmlns:add="http://www.w3.org/2005/08/addressing">

http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal</add:Action>

<wsse:Security S11:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

<wsu:Timestamp wsu:Id="4ad9d92b-dd36-4ae7-a372-a82ee0d4b213" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

<wsu:Created>2012-02-17T09:38:04.233Z</wsu:Created>

<wsu:Expires>2012-02-17T09:48:04.233Z</wsu:Expires>

</wsu:Timestamp>

</wsse:Security>

</S11:Header>

<S11:Body>

<ns:RequestSecurityTokenResponseCollection xmlns:ns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/">

<ns:RequestSecurityTokenResponse>

<ns:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</ns:TokenType>

<ns:RequestedSecurityToken>

<saml:Assertion ID="_mdqaUZ4BWj_672ve1bznz6Vu.t" IssueInstant="2012-09-17T09:38:04.108Z" Version="2.0" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">

<saml:Issuer>sts_idp_issuer_url</saml:Issuer>

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<ds:SignedInfo>

<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>

<ds:Reference URI="#_mdqaUZ4BWj_672ve1bznz6Vu.t">

<ds:Transforms>

<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>

<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

</ds:Transforms>

<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

<ds:DigestValue>SJK1qp6tIv9CRPZ8Twsx248RRQw=</ds:DigestValue>

</ds:Reference>

</ds:SignedInfo>

<ds:SignatureValue>

a7j8uANkQeDBMnDXmCCqW7x19xx1GOhB19aJ+GxCAQXiJunF9a23fcBCBRmPLwu6B5Q5NUtJiFZe

EjKIQqulTpVJ14UbuP4Q0GJiUOjgPzCvxMgnDuIB9W2kSdejQWVs9xqtLXYGjEoyo2dY7XDZpfvQ

LspTvBjkdM41ScSydEg=

</ds:SignatureValue>

<ds:KeyInfo>

<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

<wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1">7G/+BJtRSRRfmmo3JfbuDx+f+TY=</wsse:KeyIdentifier>

</wsse:SecurityTokenReference>

</ds:KeyInfo>

</ds:Signature>

<saml:Subject>

<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">salesforce_username@customer.org</saml:NameID>

<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>

</saml:Subject>

<saml:Conditions NotBefore="2012-02-17T22:43:04.233Z" NotOnOrAfter="2012-02-17T22:53:04.233Z">

<saml:AudienceRestriction>

<saml:Audience>sts_idp_issuer_url</saml:Audience>

</saml:AudienceRestriction>

</saml:Conditions>

<saml:AuthnStatement AuthnInstant="2012-02-17T22:48:04.108Z" SessionIndex="_mdqaUZ4BWj_672ve1bznz6Vu.t">

<saml:AuthnContext>

<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef>

</saml:AuthnContext>

</saml:AuthnStatement>

</saml:Assertion>

</ns:RequestedSecurityToken>

<ns:Lifetime>

<wsu:Created xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2012-08-15T22:48:04.108Z</wsu:Created>

<wsu:Expires xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2012-08-15T23:18:04.108Z</wsu:Expires>

</ns:Lifetime>

<ns:RequestedAttachedReference>

<wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd">

<wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLID">_mdqaUZ4BWj_672ve1bznz6Vu.t</wsse:KeyIdentifier>

</wsse:SecurityTokenReference>

</ns:RequestedAttachedReference>

</ns:RequestSecurityTokenResponse>

</ns:RequestSecurityTokenResponseCollection>

</S11:Body>

</S11:Envelope>