{"id":2241,"date":"2011-05-10T14:05:11","date_gmt":"2011-05-10T19:05:11","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=2241"},"modified":"2013-09-30T09:57:53","modified_gmt":"2013-09-30T14:57:53","slug":"saml-2","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=2241","title":{"rendered":"SAML"},"content":{"rendered":"<span id=\"Overview\"><h2>Overview<\/h2><\/span>\n<span id=\"What_is_SAML\"><h3>What is SAML<\/h3><\/span>\n<p>* SAML stands for Security Assertion Markup Language<br \/>\n* Is an XML based standard maintained by <a href=\"http:\/\/saml.xml.org\/saml-specifications\">OASIS<\/a><br \/>\n* SAML 1.0 approved in 2002<br \/>\n* SAML 2.0 approved in 2005<\/p>\n<span id=\"SAML_2_New_Features\"><h3>SAML 2 New Features<\/h3><\/span>\n<p>* Authentication request protocol: flow starts at the SP who issues an explicit authentication request to IdP. <\/p>\n<span id=\"What_SAML_Provides\"><h3>What SAML Provides<\/h3><\/span>\n<p>* Provides single sign-on (SSO) solution in a cross domain environment<br \/>\n* Defines a framework for exchanging authentication\/authorization information across domains in the form of assertions <em>instead of<\/em> tokens<br \/>\n* Defines a language for<br \/>\n&#8211; expressing assertions<br \/>\n&#8211; protocols for requesting and obtaining assertions from SAML authorities<br \/>\n&#8211; bindings for mapping SAML onto messaging and transport protocols<\/p>\n<span id=\"Asserting_Party\"><h3>Asserting Party<\/h3><\/span>\n<p>* aka SAML authorities<br \/>\n* The system, or administrative domain, that asserts information about a subject.<br \/>\n* Example:<br \/>\nThis user is JohnDoe, he has an email address of john.doe@acompany.com, and he was authenticated into this system using a password mechanism.<\/p>\n<span id=\"Relying_Party\"><h3>Relying Party<\/h3><\/span>\n<p>* The system, or administrative domain, that relies on information supplied to it by the asserting party.<\/p>\n<span id=\"Addressed_Issues\"><h3>Addressed Issues<\/h3><\/span>\n<p>* Limitations of browser cookies<br \/>\n* SSO interop<br \/>\n* Web services<\/p>\n<span id=\"SAML_Architecture\"><h2>SAML Architecture<\/h2><\/span>\n<span id=\"\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_1-300x219.jpg\" alt=\"\" title=\"saml1.1_concepts_1\" width=\"300\" height=\"219\" class=\"aligncenter size-medium wp-image-8945\" srcset=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_1-300x219.jpg 300w, https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_1.jpg 444w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/h6><\/span>\n<span id=\"Assertions\"><h3>Assertions<\/h3><\/span>\n<p>* Assertion is a claim, statement, or declaration of a fact made by a SAML authority<br \/>\n* There are three types of assertions:<br \/>\n&#8211; Authentication assertion: the subject is authenticated<\/p>\n<pre lang=\"xml\">\r\n   <saml:AuthnStatement\r\n     AuthnInstant=\"2005-04-01T16:57:30.000Z\">\r\n     <saml:AuthnContext>\r\n       <saml:AuthnContextClassRef>\r\n         urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport\r\n       <\/saml:AuthnContextClassRef>\r\n     <\/saml:AuthnContext>\r\n   <\/saml:AuthnStatement>\r\n<\/pre>\n<p>&#8211; Authorization assertion: the subject is authorized to access a particular resource<\/p>\n<pre lang=\"xml\">\r\n<saml:AuthzDecisionStatement>\r\n  Resource=\"http:\/\/CarRentalInc.com\/doit.cgi\"\r\n  Decision=\"Permit\">\r\n  <saml:Action>Execute<\/saml:Action>\r\n<\/saml:AuthzDecisionStatement>\r\n<\/pre>\n<p>&#8211; Attribute assertion: the subject is associated with the supplied attribute<\/p>\n<pre lang=\"xml\">\r\n<saml:AttributeStatement>\r\n  <saml:Attribute\r\n    Name=\"PaidStatus\">\r\n    <saml:AttributeValue>Paid<\/saml:AttributeValue>\r\n  <\/saml:Attribute>\r\n<\/saml:AttributeStatement>\r\n<\/pre>\n<span id=\"Protocol\"><h3>Protocol<\/h3><\/span>\n<p>* SAML defines a request\/response protocol for obtaining assertions.<\/p>\n<span id=\"Bindings\"><h3>Bindings<\/h3><\/span>\n<p>* Details exactly how the SAML protocol maps onto transport and messaging protocols.<br \/>\n* Examples: SOAP over HTTP binding.<\/p>\n<span id=\"_1\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp-253x300.jpg\" alt=\"\" title=\"saml1.1_concepts_binding_soapHttp\" width=\"253\" height=\"300\" class=\"aligncenter size-medium wp-image-8946\" srcset=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp-253x300.jpg 253w, https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp.jpg 276w\" sizes=\"auto, (max-width: 253px) 100vw, 253px\" \/><\/a><\/h6><\/span>\n<p>* Request example:<\/p>\n<span id=\"_2\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_request_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_request_1-300x135.jpg\" alt=\"\" title=\"saml1.1_concepts_binding_soapHttp_request_1\" width=\"300\" height=\"135\" class=\"aligncenter size-medium wp-image-8947\" srcset=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_request_1-300x135.jpg 300w, https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_request_1.jpg 437w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/h6><\/span>\n<p>* Response example2:<\/p>\n<span id=\"_3\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_1-300x140.jpg\" alt=\"\" title=\"saml1.1_concepts_binding_soapHttp_response_1\" width=\"300\" height=\"140\" class=\"aligncenter size-medium wp-image-8948\" srcset=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_1-300x140.jpg 300w, https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_1.jpg 467w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/h6><\/span>\n<span id=\"_4\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_2-300x189.jpg\" alt=\"\" title=\"saml1.1_concepts_binding_soapHttp_response_2\" width=\"300\" height=\"189\" class=\"aligncenter size-medium wp-image-8949\" srcset=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_2-300x189.jpg 300w, https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2011\/05\/saml1.1_concepts_binding_soapHttp_response_2.jpg 471w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/h6><\/span>\n<span id=\"Profiles\"><h3>Profiles<\/h3><\/span>\n<p>* Technical descriptions of particular flows of assertions and protocol messages that define how SAML can be used for a particular purpose.<br \/>\n* Derived from use cases.<br \/>\n* SAML 1.1 defines two profiles:<br \/>\n&#8211; Browser\/Artifact Profile: A reference is sent to relying party which is used by relying party to pull assertion from Assertion Party.<br \/>\n&#8211; Browser\/POST Profile: An assertion is POSTed directory to relying party.<\/p>\n<span id=\"BrowserArtifact_Profile:_Source-Site-First_Processing\"><h4>Browser\/Artifact Profile: Source-Site-First Processing<\/h4><\/span>\n<span id=\"Traditional_Single_Sign-On_Solutions\"><h3>Traditional Single Sign-On Solutions<\/h3><\/span>\n<p>* Trusted tickets<br \/>\n* Synchronized credentials<br \/>\n* Pseudonym services<\/p>\n<span id=\"SAML_Components\"><h2>SAML Components<\/h2><\/span>\n<p>* Credential collector: collects user credentials<br \/>\n* Session authority: maintains session state<br \/>\n* Authentication authority: produces authentication assertions<br \/>\n* Attribute authority: produces attribute assertions<br \/>\n* Attribute repository: to store attribute assertions<\/p>\n<span id=\"Common_Elements\"><h3>Common Elements<\/h3><\/span>\n<p>* Issuer<br \/>\n* ds:Signature: issuer signed signature<br \/>\n* Subject: to which assertions apply<br \/>\n* Conditions: must be evaluated before using assertions<br \/>\n* Advice: additional info to assist processing of assertions<\/p>\n<span id=\"Assertion_Statements\"><h3>Assertion Statements<\/h3><\/span>\n<p>Assertion contains 0..* of<br \/>\n* AuthnStatement: authentication statement<br \/>\n* AuthzDecisionStatement: authorization statement<br \/>\n* AttributeStatement: attribute statement<br \/>\n* Statement: custom statement<\/p>\n<span id=\"EncryptedAssertion_Element\"><h3>EncryptedAssertion Element<\/h3><\/span>\n<p>* xenc:EncryptedData<br \/>\n* xenc:EncryptedKey<\/p>\n<span id=\"Example\"><h3>Example<\/h3><\/span>\n<pre lang=\"xml\">\r\n<saml:Assertion\r\n  Version=\"2.0\"\r\n  ID=\"_34234se72\"\r\n  IssueInstant=\"2005-04-01T16:58:33.173Z\">\r\n  <saml:Issuer>http:\/\/authority.example.com\/<\/saml:Issuer>\r\n  <ds:Signature>...<\/ds:Signature>\r\n  <saml:Subject>\r\n    <saml:NameID format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\">\r\n    jygH5F90l\r\n    <\/saml:NameID>\r\n   <\/saml:Subject>\r\n   <saml:AuthnStatement\r\n     AuthnInstant=\"2005-04-01T16:57:30.000Z\">\r\n     <saml:AuthnContext>\r\n       <saml:AuthnContextClassRef>\r\n         urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport\r\n       <\/saml:AuthnContextClassRef>\r\n     <\/saml:AuthnContext>\r\n   <\/saml:AuthnStatement>\r\n <\/saml:Assertion>\r\n<\/pre>\n<span id=\"Example_1\"><h3>Example<\/h3><\/span>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" ?>\r\n<S11:Envelope xmlns:S11=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"\r\n             xmlns:S12=\"http:\/\/www.w3.org\/2003\/05\/soap-envelope\">\r\n <S11:Header xmlns=\"http:\/\/docs.oasis-open.org\/wss\/2004\/01\/\r\n  oasis-200401-wss-wssecurity-secext-1.0.xsd\"\r\n             xmlns:wsu=\"http:\/\/docs.oasis-open.org\/wss\/2004\/01\/\r\n             oasis-200401-wss-wssecurity-secext-1.0.xsd\">\r\n   <Security S11:actor=\"...\" S11:mustUnderstand=\"...\"\r\n      S12:role=\"...\">\r\n     <saml:Assertion\r\n       xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\"\r\n       MajorVersion=\"1\"\r\n       MinorVersion=\"1\"\r\n       AssertionID=\"_abf73415-02c3-1149-79c2-974523690365\"\r\n       Issuer=\"www.xyz.com\"\r\n       IssueInstance=\"2004-12-28T09:14:33Z\">\r\n       <saml:Conditions\r\n           NotBefore=\"2004-12-28T09:15:00Z\"\r\n           NotAfter=\"2004-12-28T09:30:00Z\" \/>\r\n       <saml:AuthenticationStatement\r\n           AuthenticationMethod=\"urn:oasis:names:tc:SAML:1.0:am:password\"\r\n           AuthenticationInstance=\"2004-12-28T09:14:24Z\"> \r\n           <saml:Subject>\r\n               <saml:NameIdentifier\r\n                   SecurityDomain=\"www.xyz.com\"\r\n                   Name=\"sample1\" \/>\r\n           <\/saml:Subject>\r\n       <\/saml:AuthenticationStatement>\r\n       ...\r\n     <\/saml:Assertion>\r\n   <\/Security>\r\n   ...\r\n <\/S11:Header>\r\n <S11:Body>\r\n     ...\r\n <\/S11:Body>\r\n<\/S11:Envelope>\r\n<\/pre>\n<span id=\"SAML_Implementations\"><h2>SAML Implementations<\/h2><\/span>\n<p>* ADFS<br \/>\n* WebLogic<br \/>\n* <a href=\"http:\/\/saml.xml.org\/wiki\/saml-open-source-implementations\">SAML Open Source Implementations<\/a><br \/>\n&#8211; <a href=\"http:\/\/shibboleth.internet2.edu\/\">Shibboleth<\/a><\/p>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* <a href=\"http:\/\/wiki.oasis-open.org\/security\">SAML Wiki<\/a><br \/>\n* <a href=\"http:\/\/www.oasis-open.org\/committees\/download.php\/20645\/sstc-saml-tech-overview-2%200-draft-10.pdf\">Security Assertion Markup Language(SAML) V2.0 Technical Overview<\/a><br \/>\n* <a href=\"http:\/\/saml.xml.org\/saml-specifications\">SAML Spec<\/a><br \/>\n* <a href=\"http:\/\/www.xml.com\/pub\/a\/2005\/01\/12\/saml2.html\">SAML 2: The Building Blocks of Federated Identity<\/a><br \/>\n* <a href=\"http:\/\/www.cs.ucsb.edu\/~bultan\/courses\/595-W06\/SAML.pdf\">http:\/\/www.cs.ucsb.edu\/~bultan\/courses\/595-W06\/SAML.pdf<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview What is SAML * SAML stands for Security Assertion Markup Language * Is an XML based standard maintained by OASIS * SAML 1.0 approved in 2002 * SAML 2.0 approved in 2005 SAML 2 New Features * Authentication request &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=2241\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[119],"tags":[],"class_list":["post-2241","post","type-post","status-publish","format-standard","hentry","category-saml"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-A9","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2241"}],"version-history":[{"count":18,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2241\/revisions"}],"predecessor-version":[{"id":8944,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2241\/revisions\/8944"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}