2016-03-08 176 views
5

我有點明白應該SAML如何基本驗證工作:SAML請求屬性在AuthnRequest

用戶請求資源的SP
SP將auth請求IDP
IDP認證用戶,併發送回一些用戶id
SP發送屬性查詢到IDP瞭解更多詳細信息用戶id
IDP發回屬性
SP給用戶資源

我的問題是,你能不能以任何方式繞過Attribut equery的。當我向我的測試Gluu/Shibboleth服務器發出SAML 2.0請求時,我返回givenName(firstname)和sn(lastname)。 無論如何,我可以請求inum用戶ID和電子郵件只是在AuthnRequest?

我的要求很簡單:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="MyPrefix1457456412304" Version="2.0" IssueInstant="2016-03-08T17:00:12Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"> 
    <saml:Issuer>me.com</saml:Issuer> 
</samlp:AuthnRequest> 

請求我得到的回覆是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_bff09cf745ea5722aac3f3ec57c0ecf3" IssueInstant="2016-03-08T17:01:06.140Z" Version="2.0"> 
    <saml2:Issuer .... 
    <saml2:AttributeStatement> 
     <saml2:Attribute FriendlyName="sn" Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> 
      <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">User</saml2:AttributeValue> 
     </saml2:Attribute> 
     <saml2:Attribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> 
      <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Admin</saml2:AttributeValue> 
     </saml2:Attribute> 
    </saml2:AttributeStatement> 
</saml2:Assertion> 

我讀了規範的相關部分,它似乎是說服務器可以放棄任何想要的東西(以及它想要的屬性數量)? 同樣,我的問題是我是否可以強制SAML Gluu/Shibboleth服務器將特定屬性作爲AuthnRequest的一部分給予我

回答

2

您需要將所需屬性添加到IdP上信任關係中的已發佈屬性。 Afaik沒有辦法專門請求屬性。

+0

我討厭你..... – jn1kk

+0

@Mike git good。 – jn1kk

3

只是爲了提供更多的細節,當您將元數據發送給IdP時,您需要時間申請附加屬性作爲SP。該元數據描述了您的服務,包括ACS端點,您的AuthnRequests將簽名的公共證書,您希望您的合作伙伴加密的證書,您需要的屬性,您唯一的實體ID等等。一旦你確定了你的服務需求,這個元數據不必改變 - 對於任何合作伙伴。您可以將其發送給您與之合作的每個人。

一旦你的合作伙伴收到這個元數據,它們將它導入它,並用你的身份信息庫滿足你請求的信息的屬性,配置簽名和加密等等。一旦完成,他們發送它們的元數據給你,他們的協議端點(您需要發送AuthnRequests等),可以驗證其簽名的證書,驗證他們發送給您的屬性(這些可以根據您應該持有的對話進行更改合作伙伴)等。

您得到這個元數據,並將其導入到您的系統中,並根據需要構建連接到您的應用程序。