IdP である LINE WORKS は SP からの認証要求メッセージを受け取ると、SAML Request を検証した後に LINE WORKS ログインページを表示します。ユーザーがログインに成功すると LINE WORKS は SAML Response を作成し SP が指定した ACS URL に送信します。SP は SAML Response を検証して SP の認証トークンを発行します。
注意
- LINE WORKS を IdP と SP の両方として使用する場合は認証元となるサービスのログインページを表示します。
例
- LINE WORKS を IdP として連携サービス A を SP に登録する
- 連携サービス B を IdP として LINE WORKS を SP に登録する
- 連携サービス A からの認証要求時、連携サービス B のログインページが表示される
SAML Request に指定されている ACS URL を使用します。
POST https://AuthnRequest-AssertionConsumerServiceURL| Parameter | Type | Description |
|---|---|---|
| SAMLResponse | String | 認証要求に対する応答内容 (Base64 エンコード) required |
| RelayState | String | 認証要求時に SP が指定した RelayState 値 |
注意
- SAML Request の Protocol Binding に "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 以外を設定した場合には GET を使用し、SAMLResponse は Deflate + Base64 でエンコードされます。
<?xml version="1.0" encoding="UTF-8"?><saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"Destination="{LINE WORKS に登録した ACS URL}" ID="{LINE WORKS で発行する ID}" InResponseTo="{SAML Request に含まれる ID}" IssueInstant="{SAML Response 生成日時}" Version="2.0"> <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"> {IdP の Provider ID} </saml2:Issuer> <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="{LINE WORKS で発行する ID}" IssueInstant="{SAML Response 生成日時}" Version="2.0"> <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"> {Response Issuer} </saml2:Issuer> <saml2:Subject> <saml2:NameID Format="unspecified"> "{ログインしたユーザーの LINE WORKS ID}" </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>{LINE WORKS に登録した SP Issuer} </saml2:Audience> </saml2:AudienceRestriction> </saml2:Conditions> <saml2:AuthnStatement AuthnInstant="{SAML Response 生成日時}" SessionIndex="{LINE WORKS で発行する ID}"> <saml2:AuthnContext> <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef> </saml2:AuthnContext> </saml2:AuthnStatement> </saml2:Assertion></saml2p:Response>SAML Response の各項目は下記の通りです。
| Parameter | Type | Description |
|---|---|---|
| Response Destination | String | SAML Request に含まれる ACS URL required |
| Response ID | String | Response を特定するための一意となる値 ランダム文字列 required |
| Response InresponseTo | Date(UTC) | SAML Request に含まれる ID required |
| Response IssueInstant | Date(UTC) | SAML Response 生成日時 required |
| Signature | String | デジタル署名 required |
| Assertion ID | String | Assertion を特定するための一意となる値 ランダム文字列 |
| Assertion IssueInstant | Date(UTC) | Assertion 生成日時 |
| Subject NameID | String | ユーザーの LINE WORKS ログイン ID (id@domain or id@group) required |
| SubjectConfirmationData InResponseTo | String | SAML Request に含まれる ID required |
| SubjectConfirmationData NotOnOrAfter | Date(UTC) | SAML Response 満了日時 required |
| SubjectConfirmationData Recipient | String | ACS URL required |
| Conditions NotBefore | Date(UTC) | SAML Response 生成日時 required |
| Conditions NotOnOrAfter | Date(UTC) | SAML Response 満了日時 required |
| Audience | String | SAML Request に含まれる SP の SP Issuer (Entity Id) required |
| AuthnStatement AuthnInstant | Date(UTC) | SAML Response 生成日時 required |
| AuthnStatement SessionIndex | String | Session を特定するための一意となる値 ランダム文字列 required |
注意
- SP は、 SAML Response に含まれる Signature を、 Developer Console で発行した証明書ファイル (.pem) を用いて検証する必要があります。
<?xml version="1.0" encoding="UTF-8"?><saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://www.example.com/vendor.com/acs" ID="iikplioanoofjomkgckmmamjfipjnbcmjhindmgd" InResponseTo="akidlcfmckodoaojopljbhcaieejopdiebeelgke" IssueInstant="2018-02-27T05:42:27.614Z" Version="2.0"> <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://auth.worksmobile.com/saml2/example.com</saml2:Issuer> <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="mojkjoofkhhfdgcajjommcnjdmclnbbibamkaojh" IssueInstant="2018-02-27T05:42:27.678Z" Version="2.0"> <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://auth.worksmobile.com/saml2/example.com</saml2:Issuer> <saml2:Subject> <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">dev@vendor.com</saml2:NameID> <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> <saml2:SubjectConfirmationData InResponseTo="akidlcfmckodoaojopljbhcaieejopdiebeelgke" NotOnOrAfter="2018-02-27T05:47:27.678Z" Recipient="https://www.example.com/vendor.com/acs"/> </saml2:SubjectConfirmation> </saml2:Subject> <saml2:Conditions NotBefore="2018-02-27T05:42:27.678Z" NotOnOrAfter="2018-02-27T05:47:27.678Z"> <saml2:AudienceRestriction> <saml2:Audience>https://example.com/sp/provider</saml2:Audience> </saml2:AudienceRestriction> </saml2:Conditions> <saml2:AuthnStatement AuthnInstant="2018-02-27T05:42:27.678Z" SessionIndex="bjbgljemhimbdimmpdjcbelfeakfhdpcdmebjcna"> <saml2:AuthnContext> <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef> </saml2:AuthnContext> </saml2:AuthnStatement> </saml2:Assertion></saml2p:Response>