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) | 不明なエラー |