クラウドとの認証連携

2011年2月18日(金)
米川 和利

4.3.3 SAMLレスポンスの生成

社内ポータル(Identity Provider)は、下記のようなSAMLレスポンスを生成します。

<!--//--><![CDATA[// ><!--
 
<samlp:Response ID="irFuI92kZe8XlXKFE17AZBm7i8QSK15xP4S0704eB" IssueInstant="2011-01-28T07:41:04Z" Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
 
<Assertion ID="iPMDBDlyWGMddEQZxJzvtrrqTlKwnWlez05K2MuCE"
IssueInstant="2011-01-28T07:41:04Z" Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">yonekawa@example.com
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData
NotOnOrAfter="2011-01-28T07:51:04Z" />
 
 
<Conditions NotBefore="2011-01-28T07:36:04Z"
NotOnOrAfter="2011-01-28T07:51:04Z">
<AudienceRestriction>
 
 
<AuthnStatement AuthnInstant="2011-01-28T07:41:04Z">
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password
 
 
 
 
 
//--><!
ポイント(6) SAMLでは、Identity Providerが、認証情報(ユーザーはどのような方法で認証されたかなど)をアサーション(Assertion)と呼ばれるXMLで作成します。
SAMLでは、アサーションを相手サイトに渡す場合、認証レスポンス(Response)と呼ばれるXMLでさらに包みます。
各電文のXML形式は、SAMLの「Core」仕様書に記述されています。

次に、Identity Providerは、認証レスポンスが改ざんされないように認証レスポンスに、XML署名と呼ばれる方法で署名を付けます。この署名には最初に作成した秘密鍵を使用します。

<!--//--><![CDATA[// ><!--
 
<?xml version="1.0" encoding="UTF-8"?><samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" ID="irFuI92kZe8XlXKFE17AZBm7i8QSK15xP4S0704eB" IssueInstant="2011-01-28T07:41:04Z" Version="2.0">
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>      <Reference URI="">
  <Transforms>
  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
   
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
  <DigestValue>Nq67lRA/RZ+7YZHuB519uJh9K+g=
   
   
  <SignatureValue>AA5vfTNFToGjkpjYa1yXL4WtC/oWvid7F1yZGGzJMX7cZb2Zq9C2jzp92C7olOJGZ9nuk2t/oK19
  S+dMVx+69lNwF4JCro4/S2mSvs3HokTidMDr/yOP4vbH3ML3hOirJc5VOKV3/BG/DuyI8BTPd/yA
  soffhTzoXU9ruul5bZs=
   
  <samlp:Status>
  <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
   
  <Assertion ID="iPMDBDlyWGMddEQZxJzvtrrqTlKwnWlez05K2MuCE" IssueInstant="2011-01-28T07:41:04Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
  <Subject>
  <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">yonekawa@example.com
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
  <SubjectConfirmationData NotOnOrAfter="2011-01-28T07:51:04Z" Recipient="https://login.salesforce.com"/>
   
   
  <Conditions NotBefore="2011-01-28T07:36:04Z" NotOnOrAfter="2011-01-28T07:51:04Z">
  <AudienceRestriction>
   
   
  <AuthnStatement AuthnInstant="2011-01-28T07:41:04Z">
  <AuthnContext>
  <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password
   
   
   
 
 
//--><!
ポイント(7) SAMLでは、社内ポータル(Identity Provider)からsalesforce(Service Provider)へ送る認証レスポンスには、XML署名を必ず付けます。
XML署名を付けることで、悪意のあるユーザーが認証レスポンスを改ざんすることを防ぎます。

4.3.4 SAMLレスポンスの送信

社内ポータル(Identity Provider)は、上記で作成した認証レスポンス(XML)をBASE64でエンコード後、下記のようなHTMLを使用し、ブラウザ経由で、salesforce(Service Provider)へ認証レスポンス(XML)転送します。

<!--//--><![CDATA[// ><!--
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <meta http-equiv="Content-Script-Type" content="text/javascript">
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="Cache-Control" content="no-cache">
  <meta http-equiv="Cache-Control" content="no-store">
  <meta http-equiv="Expires" content=" Sun, 10 Jan 1990 01:01:01 GMT">
  <title>login
  <style type="text/css">
  <!--
  .vb { visibility: visible; }
  .hd { visibility: hidden; }
  -->
   
  <script language="JavaScript">
   
//--><!
<input type="submit" name="SUBMIT" value="Login"/>
日本ヒューレットパッカード株式会社

1995年 日立製作所に入社。システム、アプリケーション開発に従事。2001年より現職。
シングルサインオン、アイデンティティ管理、SAML・OpenIDの製品開発に従事する。
小学6年生の時に、カシオのPB-100が懸賞で当たったのがプログラミングの始まり。Javaをこよなく愛するが、最近は、PHPとC#が気になる。趣味は熱帯魚の飼育。週末は、妻と4歳の息子とで食べ歩き。
http://twitter.com/k_yonekawa

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています