SAML Response 生成

    「図 5 LINE WORKS サービスとクライアント間の SAML2.0 による SSO」の 5~6 のプロセスにあたるロジックを実装します。IdP 側でユーザー認証後に SAML Response を生成して LINE WORKS の ACS URL にリダイレクトします。

    Request URL

    URL は、LINE WORKS 側からの SAML Request 内に含まれた「AssertionConsumerServiceURL」値です。

    例) https://LINEWORKS 認証システム URL/acs/mycompany.com

    注意

    • ACS URL は、ユーザー環境および LINE WORKS サービスの変更により変更される可能性があります。必ず SAML Request に含まれる "AssertionConsumerServiceURL" を使用してください。

    HTTP Method

    POST

    SAML Request では ProtocolBinding を HTTP-POST に指定しています。必ず POST を使用してください。

    Request

    パラメータ タイプ 必須 説明
    SAMLResponse String Y SAML 2.0 Response 形式に従った文字列(Base64 エンコードした値)
    RelayState String Y LINE WORKS からログインページのリクエスト時に渡した RelayState 値

    SAML Response 明細

    <?xml version="1.0" encoding="UTF-8"?>
    <saml2p:Response
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" 
    ID="{IdP 側で発行する ID}"
    InResponseTo="{SAML Requestに含まれている ID}" 
    IssueInstant="{SAML Response 生成日時}" 
    Version="2.0">
    <Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">
              {デジタル署名}
    </Signature>
    <saml2p:Status>
    <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
    </saml2p:Status>
    <saml2:Assertion
    xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="{IdP 側で発行する ID}" 
    IssueInstant="{SAML Response 生成日時}" 
    Version="2.0">
    <saml2:Subject>
          <saml2:NameID 
    Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">
    {ログインしたユーザーのExternal Key}</saml2:NameID>
          <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
            <saml2:SubjectConfirmationData 
    InResponseTo="{SAML Request に含まれている ID}" 
    NotOnOrAfter="{SAML Response 満了日時}" 
    Recipient="{ACS URL}" />
          </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions 
    NotBefore="{SAML Response 開始日時}" 
    NotOnOrAfter="{SAML Response 満了日時}">
          <saml2:AudienceRestriction>
            <saml2:Audience>{ACS URL}</saml2:Audience>
          </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement 
    AuthnInstant="{SAML Response 生成日時}" 
    SessionIndex="{IdP 側で発行するID}"
    SessionNotOnOrAfter="{LINE WORKS のセッション満了日時}">
    </saml2:AuthnStatement>
      </saml2:Assertion>
    </saml2p:Response>
    

    SAML Responseの各項目は、以下のとおりです。

    項目 タイプ 必須 説明
    Response ID String Y IdP 側で発行するID
    Response InresponseTo String Y SAML Request に含まれている ID
    Response IssueInstant Date(UTC) Y SAML Response 生成日時
    Signature String Y デジタル署名
    Assertion ID String N IdP 側で発行する ID
    Assertion IssueInstant Date(UTC) N SAML Response 生成日時
    Subject NameID String Y ログインした LINE WORKS ユーザーの ExternalKey
    SubjectConfirmationData InResponseTo String Y SAML Request に含まれている ID
    SubjectConfirmationData NotOnOrAfter Date(UTC) Y SAML Response 開始日時
    SubjectConfirmationData Recipient String Y ACS URL
    Conditions NotBefore Date(UTC) Y SAML Response 開始日時
    Conditions NotOnOrAfter Date(UTC) Y SAML Response 満了日時
    Audience String Y ACS URL
    AuthnStatement AuthnInstant Date(UTC) Y SAML Response 生成日時
    AuthnStatement SessionIndex String Y IdP 側で発行するID
    AuthnStatement SessionNotOnOrAfter Date(UTC) N LINE WORKS のセッション満了日時。
    LINE WORKS 側のポリシーにより自動延長されることがあります。

    参考

    • LINE WORKS のログインセッションの有効期限は SessionNotOnOrAfter の値に従います。ただし、LINE WORKS サービスのポリシーにより、ユーザーが使用中の場合に自動で延長されることがあります。
    • ユーザーの利用デバイスに合わせて SessionNotOnOrAfter の値をコントロールするよう実装することも検討してください。

    SAML Response Example

    <?xml version="1.0" encoding="UTF-8"?>
    <saml2p:Response
        xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" 
        ID="aidalcbpncbpebcnglhhgkkbojkgbplhhhlecbjb" 
    
    InResponseTo="gbggljimijodibeomaehmnmjniogjebpjckecbdg" IssueInstant="2018-02-14T10:39:05.956Z" Version="2.0">
        <Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">
            ……
        </Signature>
        <saml2p:Status>
            <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
        </saml2p:Status>
        <saml2:Assertion
            xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="pbfijmklioghpbickikmeanhemnmijnmchhibenb" IssueInstant="2018-02-14T10:39:05.956Z" Version="2.0">
            <saml2:Subject>
                <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">admin@company.com</saml2:NameID>
                <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                    <saml2:SubjectConfirmationData InResponseTo="gbggljimijodibeomaehmnmjniogjebpjckecbdg" NotOnOrAfter="2018-02-14T10:44:05.956Z" Recipient="https://auth.worksmobile.com/acs/compay.com" />
                </saml2:SubjectConfirmation>
            </saml2:Subject>
            <saml2:Conditions NotBefore="2018-02-14T10:39:05.956Z" NotOnOrAfter="2018-02-14T10:44:05.956Z">
                <saml2:AudienceRestriction>
                    <saml2:Audience>https://auth.worksmobile.com/acs/company.com</saml2:Audience>
                </saml2:AudienceRestriction>
            </saml2:Conditions>
            <saml2:AuthnStatement AuthnInstant="2018-02-14T10:39:05.956Z" SessionIndex="lepcacjgfnpciekmhhjbeljadfapemdoncmhlkol" SessionNotOnOrAfter="2018-02-15T10:39:05.956Z">
            </saml2:AuthnStatement>
        </saml2:Assertion>
    </saml2p:Response>
    

    SAML Response 検証のエラーコード

    LINE WORKS 側の SAML Response 検証に関するエラーコードは、以下の通りです。

    コード メッセージ 説明
    510 Invalid SAMLResponse. SAMLResponse XML が不正。
    511 Signature validation Failed. 署名が不正。
    512 SAMLResponse decoding failed. Base64 デコードに失敗
    513 SAMLResponse inflate failed. SAMLResponse の Inflate エラー
    514 Signature is missing. 署名されていない。
    515 Invalid SAMLResponse. (StatusCode is not Success) SAMLResponse が不正。(statusCodeエラー)
    520 Invalid NameID. (520) NamedId が不正。
    530 Works login Failed. (530) ログイン失敗
    531 Invalid User. (531) LINE WORKS ユーザーではない。NamedId(externalKey)が不正。
    532 No authority to use. ログインが制限されたユーザー。
    534 Invalid IDC. ログインした IDC が不正。
    535 Invalid Acs Url. ACS URL が不正。
    536 Certification time is incorrect. 認証された時間が不正。
    537 Invalid tenant. SSO が有効になっていないテナント。
    551 Error in IDP API. IdP 側の Login APIでエラーが発生。
    552 SAMLResponse or RelayState is not exist. IdP 側の Login API で必須データが含まれていない。
    561 Unexpected Error. (561) 不明なエラー
    594 Login Fail. (594) ログイン失敗
    595 Invalid Access. (595) 不正なアクセス
    596 Invalid Access. (596) 不正なアクセス
    598 Login Fail. (598) 証明書の照会エラー
    599 Login Fail. (599) 不明なエラー