日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

安全声明标记语言SAML2.0初探

發(fā)布時(shí)間:2024/2/28 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安全声明标记语言SAML2.0初探 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 簡(jiǎn)介
  • SAML的構(gòu)成
  • SAML的優(yōu)勢(shì)
  • SAML是怎么工作的
    • SP redirect request; IdP POST response
    • SP POST Request; IdP POST Response
    • SP redirect artifact; IdP redirect artifact
  • 總結(jié)

簡(jiǎn)介

SAML的全稱是Security Assertion Markup Language, 是由OASIS制定的一套基于XML格式的開放標(biāo)準(zhǔn),用在身份提供者(IdP)和服務(wù)提供者 (SP)之間交換身份驗(yàn)證和授權(quán)數(shù)據(jù)。

SAML的一個(gè)非常重要的應(yīng)用就是基于Web的單點(diǎn)登錄(SSO)。

接下來(lái)我們一起來(lái)看看SAML是怎么工作的。

SAML的構(gòu)成

在SAML協(xié)議中定義了三個(gè)角色,分別是principal:代表主體通常表示人類用戶。identity provider (IdP)身份提供者和service provider (SP)服務(wù)提供者。

IdP的作用就是進(jìn)行身份認(rèn)證,并且將用戶的認(rèn)證信息和授權(quán)信息傳遞給服務(wù)提供者。

SP的作用就是進(jìn)行用戶認(rèn)證信息的驗(yàn)證,并且授權(quán)用戶訪問指定的資源信息。

SAML的優(yōu)勢(shì)

為什么要使用SAML呢?

第一可以提升用戶體驗(yàn),如果系統(tǒng)使用SAML,那么可以在登錄一次的情況下,訪問多個(gè)不同的系統(tǒng)服務(wù)。這實(shí)際上也是SSO的優(yōu)勢(shì),用戶不需要分別記住多個(gè)系統(tǒng)的用戶名和密碼,只用一個(gè)就夠了。

第二可以提升系統(tǒng)的安全性,使用SAML,我們只需要向IdP提供用戶名密碼即可,

第三用戶的認(rèn)證信息不需要保存在所有的資源服務(wù)器上面,只需要在在IdP中存儲(chǔ)一份就夠了。

SAML是怎么工作的

接下來(lái),我們通過一個(gè)用SAML進(jìn)行SSO認(rèn)證的流程圖,來(lái)分析一下SAML是怎么工作的。

根據(jù)請(qǐng)求方式有redirect和post的不同,使用SAML來(lái)進(jìn)行SSO認(rèn)證有通常有三種方式,我們一一道來(lái)。

SP redirect request; IdP POST response

上圖中User Agent就是web瀏覽器,我們看一下如果用戶想請(qǐng)求Service Provider的資源的時(shí)候,SAML協(xié)議是怎么處理的。

  • 用戶通過User Agent請(qǐng)求Service Provider,比如:
  • http://sp.flydean.com/myresource

    SP將會(huì)對(duì)該資源進(jìn)行相應(yīng)的安全檢查,如果發(fā)現(xiàn)已經(jīng)有一個(gè)有效的安全上下文的話,SP將會(huì)跳過2-7步,直接進(jìn)入第8步。

  • 如果在第一步的時(shí)候,SP并沒有找到相應(yīng)的有效安全上下文的話,則會(huì)生成對(duì)應(yīng)的SAMLRequest,并將User Agent重定向到IdP:
  • 302 Redirect Location: https://idp.flydean.com/SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token

    RelayState是SP維護(hù)的一個(gè)狀態(tài)信息,主要用來(lái)防止CSRF攻擊。

    其中這個(gè)SAMLRequest是用Base64編碼的samlp:AuthnRequest,下面是一個(gè)samlp:AuthnRequest的例子:

    <samlp:AuthnRequestxmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="aaf23196-1773-2113-474a-fe114412ab72"Version="2.0"IssueInstant="2020-09-05T09:21:59Z"AssertionConsumerServiceIndex="0"AttributeConsumingServiceIndex="0"><saml:Issuer>https://sp.flydean.com/SAML2</saml:Issuer><samlp:NameIDPolicyAllowCreate="true"Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/></samlp:AuthnRequest>

    為了安全起見,SAMLRequest還可以使用SP提供的簽名key來(lái)進(jìn)行簽名。

  • User agent將會(huì)發(fā)送一個(gè)get請(qǐng)求到IdP的SSO server :
  • GET /SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token HTTP/1.1 Host: idp.flydean.com

    IdP收到這個(gè)AuthnRequest請(qǐng)求之后,將會(huì)進(jìn)行安全驗(yàn)證,如果是合法的AuthnRequest,那么將會(huì)展示登錄界面。

  • 用戶可以輸入用戶名密碼進(jìn)行登錄。登錄成功之后,IdP將會(huì)返回一個(gè)XHTML form:
  • <form method="post" action="https://sp.flydean.com/SAML2/SSO/POST" ...><input type="hidden" name="SAMLResponse" value="response" /><input type="hidden" name="RelayState" value="token" />...<input type="submit" value="Submit" /></form>

    這個(gè)form中包含了SAMLResponse信息,SAMLResponse中包含了用戶相關(guān)的信息。

    同樣的SAMLResponse也是使用Base64進(jìn)行編碼過的samlp:Response。

    <samlp:Responsexmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="identifier_2"InResponseTo="identifier_1"Version="2.0"IssueInstant="2020-09-05T09:22:05Z"Destination="https://sp.flydean.com/SAML2/SSO/POST"><saml:Issuer>https://idp.flydean.com/SAML2</saml:Issuer><samlp:Status><samlp:StatusCodeValue="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status><saml:Assertionxmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="identifier_3"Version="2.0"IssueInstant="2020-09-05T09:22:05Z"><saml:Issuer>https://idp.flydean.com/SAML2</saml:Issuer><!-- a POSTed assertion MUST be signed --><ds:Signaturexmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature><saml:Subject><saml:NameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID><saml:SubjectConfirmationMethod="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationDataInResponseTo="identifier_1"Recipient="https://sp.flydean.com/SAML2/SSO/POST"NotOnOrAfter="2020-09-05T09:27:05Z"/></saml:SubjectConfirmation></saml:Subject><saml:ConditionsNotBefore="2020-09-05T09:17:05Z"NotOnOrAfter="2020-09-05T09:27:05Z"><saml:AudienceRestriction><saml:Audience>https://sp.flydean.com/SAML2</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatementAuthnInstant="2020-09-05T09:22:00Z"SessionIndex="identifier_3"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>

    我們可以看到samlp:Response中包含有saml:Assertion信息。

  • user agent 收到XHTML form之后將會(huì)提交該form給SP。

  • SP中的assertion consumer service將會(huì)處理這個(gè)請(qǐng)求,創(chuàng)建相關(guān)的安全上下文,并將user agent重定向到要訪問的資源頁(yè)面。

  • user agent再次請(qǐng)求SP資源。

  • 因?yàn)榘踩舷挛囊呀?jīng)創(chuàng)建完畢,SP可以直接返回相應(yīng)的資源,不用再次到IdP進(jìn)行認(rèn)證。

  • 我們可以看到上面的所有的信息交換都是由前端瀏覽器來(lái)完成的,在SP和IdP之間不存在直接的通信。

    這種全部由前端來(lái)完成信息交換的方式好處就是協(xié)議流非常簡(jiǎn)單,所有的消息都是簡(jiǎn)單的GET或者POST請(qǐng)求。

    如果為了提高安全性,也可以使用引用消息。也就是說IdP返回的不是直接的SAML assertion,而是一個(gè)SAML assertion的引用。SP收到這個(gè)引用之后,可以從后臺(tái)再去查詢真實(shí)的SAML assertion,從而提高了安全性。

    SP POST Request; IdP POST Response

    剛剛講的是SP redirect Request,這里我們看一下SP POST request是怎么做的:

    和第一種方式的不同之處在于第二步和第三步。

    第二步:SP不再進(jìn)行redirect了,而是返回一個(gè)XHTML form給User agent:

    <form method="post" action="https://idp.flydean.com/SAML2/SSO/POST" ...><input type="hidden" name="SAMLRequest" value="request" /><input type="hidden" name="RelayState" value="token" />...<input type="submit" value="Submit" /></form>

    第三步:拿到第二步的XHTML form之后,User agent將該form post到IdP SSO server。

    從第四步開始就和第一種方式是一樣的了。

    SP redirect artifact; IdP redirect artifact

    第三種方式,SP和IdP都用的是redirect,但是redirect的內(nèi)容都是artifact。

    之前我們講了SAML message可以以值的方式也可以以引用的方式來(lái)進(jìn)行傳遞。

    而這種以引用的傳遞方式就是artifact。

    收到artifact的receiver會(huì)發(fā)送一個(gè)samlp:ArtifactResolve 給issuer,從而獲得真正的message。

    下面是一個(gè)向IdP請(qǐng)求message的例子:

    <samlp:ArtifactResolvexmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="_cce4ee769ed970b501d680f697989d14"Version="2.0"IssueInstant="2020-09-05T09:21:58Z"><saml:Issuer>https://idp.flydean.com/SAML2</saml:Issuer><!-- an ArtifactResolve message SHOULD be signed --><ds:Signaturexmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature><samlp:Artifact>AAQAAMh48/1oXIM+sDo7Dh2qMp1HM4IF5DaRNmDj6RdUmllwn9jJHyEgIi8=</samlp:Artifact></samlp:ArtifactResolve>

    相應(yīng)的server會(huì)返回一個(gè)包含samlp:AuthnRequest的samlp:ArtifactResponse:

    <samlp:ArtifactResponsexmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"ID="_d84a49e5958803dedcff4c984c2b0d95"InResponseTo="_cce4ee769ed970b501d680f697989d14"Version="2.0"IssueInstant="2020-09-05T09:21:59Z"><!-- an ArtifactResponse message SHOULD be signed --><ds:Signaturexmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature><samlp:Status><samlp:StatusCodeValue="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status><samlp:AuthnRequestxmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="_306f8ec5b618f361c70b6ffb1480eade"Version="2.0"IssueInstant="2020-09-05T09:21:59Z"Destination="https://idp.flydean.com/SAML2/SSO/Artifact"ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"AssertionConsumerServiceURL="https://sp.flydean.com/SAML2/SSO/Artifact"><saml:Issuer>https://sp.flydean.com/SAML2</saml:Issuer><samlp:NameIDPolicyAllowCreate="false"Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"/></samlp:AuthnRequest></samlp:ArtifactResponse>

    看下第三種方式的流程圖:

    可以看到這種方式和前面兩種方式的區(qū)別就是多了一個(gè)請(qǐng)求真實(shí)message的步驟。

    以第三,四,五步為例:

    第三步user agent請(qǐng)求IdP的SSO server:

    https://idp.example.org/SAML2/SSO/Artifact?SAMLart=artifact_1&RelayState=token

    注意這里請(qǐng)求的參數(shù)變成了SAMLart。

    第四步,IdP需要發(fā)送一個(gè)samlp:ArtifactResolve到SP來(lái)請(qǐng)求真正的samlp:AuthnRequest。

    第五步,SP返回一個(gè)samlp:ArtifactResponse 包含samlp:AuthnRequest。

    總結(jié)

    SAML協(xié)議和它的基本用法就是上面這樣。下面的文章我們會(huì)舉一個(gè)具體的例子,來(lái)講解如何應(yīng)用SAML協(xié)議。

    本文作者:flydean程序那些事

    本文鏈接:http://www.flydean.com/saml-startup/

    本文來(lái)源:flydean的博客

    歡迎關(guān)注我的公眾號(hào):「程序那些事」最通俗的解讀,最深刻的干貨,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來(lái)發(fā)現(xiàn)!

    總結(jié)

    以上是生活随笔為你收集整理的安全声明标记语言SAML2.0初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人免费淫片aa视频免费 | 在线观看av免费 | 亚洲欧洲日韩国产 | 日本不卡网 | 欧美全黄 | 好吊操这里只有精品 | 91蝌蚪少妇 | 高清一区二区三区 | 一道本一区二区 | 亚洲午夜精品 | 青青伊人影院 | 美女色网站 | 久久机热 | 黄色在线免费观看网站 | 日穴视频| 97色资源 | 精品视频久久久久久 | 黄网av| 中国一级特黄录像播放 | 老子影院午夜伦不卡大全 | 国产jzjzjz丝袜老师水多 | 欧美男女交配视频 | 超碰凹凸 | 色视频免费在线观看 | 国产一级久久 | 成av人片一区二区三区久久 | 麻豆天天躁天天揉揉av | 成人国产一区二区三区精品麻豆 | 一级欧美黄色片 | a级免费网站 | 日韩永久| 亚洲国产精品99久久 | 奇米影视av | av在线a | 丝袜制服一区 | 免费在线观看黄色av | 国产麻豆电影在线观看 | 人妻丰满熟妇无码区免费 | 日韩一区二区三区久久 | 91欧美激情一区二区三区 | 二区不卡 | 嫩草影院懂你的 | 给我看高清的视频在线观看 | 爆乳熟妇一区二区三区 | 一级全黄男女免费大片 | 欧美激情在线看 | 午夜免费观看视频 | 国产女人高潮时对白 | 欧美大胆a | 欧美成人做爰大片免费看黄石 | 国产性猛交xx乱 | 医生强烈淫药h调教小说视频 | 夜夜操免费视频 | 伊人综合影院 | www成人啪啪18软件 | 精品丰满少妇一区二区三区 | 激情av在线播放 | 深夜福利在线播放 | 国产制服丝袜 | 5d肉蒲团之性战奶水 | 亚洲一区二区三区在线免费观看 | 国产第一页在线播放 | 女人一区二区 | 国产精品99久久久久久久久 | 波多野结衣1区2区3区 | 大陆一级黄色片 | 人妻丰满熟妇aⅴ无码 | 人妻妺妺窝人体色www聚色窝 | 婷婷午夜精品久久久久久性色av | 无套中出丰满人妻无码 | 99有精品| 天天躁日日躁狠狠躁av | 九九九热 | 96免费视频| 麻豆最新 | 免费视频一二三区 | 歪歪视频在线观看 | а√在线中文网新版地址在线 | 午夜精品一区二 | 亚洲av无码一区二区乱子伦as | 日本成人免费在线视频 | 美女被啪啪| 欧美综合在线观看 | 欧洲性猛交 | 人人插人人 | 秋霞国产午夜精品免费视频 | 欧美日性视频 | xxxxxx黄色| 久久麻豆视频 | 潘金莲一级淫片aaaaa | 噼里啪啦国语电影 | 成人毛片视频在线观看 | 欧美精品一二三四区 | 国产精品揄拍100视频 | 日韩欧美亚洲国产 | 欧美一级淫片007 | 中日韩午夜理伦电影免费 | 婷婷伊人五月天 | 日本在线有码 |