SAML身份验证如何工作

  翻译文章,原文:What is SAML and How Does it Work?[1]


SAML身份验证如何工作

用户身份验证是大多数应用程序系统不可或缺的一部分,并且对身份验证的不同形式和协议的需求也在增加。一种协议是SAML,在本文中,您将了解它的工作原理!

什么是SAML?

安全声明标记语言(SAML)是用于两个实体之间的身份验证和授权的基于XML的框架:服务提供者和身份提供者。服务提供商同意信任身份提供商对用户进行身份验证。作为回报,身份提供者生成身份验证断言,该断言指示用户已通过身份验证。

SAML是标准的单点登录(SSO)格式。认证信息通过数字签名的XML文档进行交换。这是一个复杂的单点登录(SSO)实施,可实现无缝认证,主要是在企业和企业之间进行。

使用SAML,您不必担心输入身份验证凭据或记住和重置密码。

SAML身份验证的好处

SAML身份验证的好处包括:

标准化: SAML是一种标准格式,它允许系统之间的无缝互操作性,而与实现无关。它消除了与供应商和特定平台的体系结构和实现相关的常见问题。

改善的用户体验: 用户只需登录一次即可访问多个服务提供商,而无需其他身份验证,从而可以在每个服务提供商处获得更快更好的体验。这样可以消除密码问题,例如重置和恢复。

增强的安全性: 安全性是软件开发的关键方面,对于企业应用程序,安全性至关重要。SAML提供了单点身份验证,该身份验证发生在安全的身份提供者处。然后,SAML将身份转让给服务提供商。这种身份验证形式可确保凭据不会离开防火墙边界。

目录的松散耦合: SAML不需要在目录之间维护和同步用户信息。

降低服务提供商的成本: 使用SAML,您不必维护多个服务中的帐户信息。身份提供者承担了这一负担。


SAML身份验证如何工作


SAML身份验证如何真正起作用?

让我们深入研究应用程序中SAML身份验证的流程。SAML单点登录身份验证通常涉及服务提供商和身份提供商。处理流程通常涉及信任建立和认证流程阶段。

考虑以下示例:

•我们的身份提供者是Auth0

•我们的服务提供商是一个名为Zagadat的企业人力资源门户网站

注意: 身份提供者可以是任何身份管理平台。现在,用户正在尝试使用SAML身份验证来访问 Zagadat

这是处理流程:

1.用户尝试从浏览器登录到Zagadat2.Zagadat通过生成SAML请求进行响应

SAML身份验证如何工作

SAML请求的示例

3.浏览器将用户重定向到SSO URL Auth04.Auth0解析SAML请求,对用户进行身份验证(这可以通过用户名和密码,甚至是双因素身份验证;如果用户已经在auth0上进行了身份验证,则将跳过此步骤)并生成SAML响应

SAML身份验证如何工作


SAML响应示例

5.Auth0 将编码的SAML响应返回到浏览器6.浏览器将SAML响应发送到Zagadat进行验证7.如果验证成功,则用户将登录Zagadat并被授予对所有各种资源的访问权限


SAML身份验证如何工作


处理流程图


请注意在SAML请求和响应中突出显示的属性。以下是这些参数的一些词汇表:

ID:新生成的识别号码

IssueInstant(时间戳):指示生成时间的时间戳


AssertionConsumerServiceURL()
:服务提供商的SAML URL接口,身份提供商向其中发送身份验证令牌。

Issuer:身份验证服务提供商的名称(身份)

InResponseTo:该响应所属的SAML请求的ID

Recipient:服务提供商的名称(身份)

带有Auth0的SAML身份验证

使用Auth0,SAML身份验证非常容易实现。我们可以轻松地将应用程序配置为使用Auth0锁进行SAML身份验证。

在下面的示例中,我们将使用Auth0帐户(帐户1)作为服务提供商,并通过第二个Auth0帐户(帐户2)对用户进行身份验证,该帐户将用作我们的身份提供商。请按照以下步骤操作:

1. 建立两个Auth0帐户

如果您还没有两个Auth0帐户,则需要创建它们。如果您已经有两个帐户,则可以跳至步骤2。

在Auth0面板中

在右上角,单击您的帐户名称,然后在出现的弹出菜单中选择“New Account”。


SAML身份验证如何工作


在出现的窗口中,在 “Your Auth0 domain” 字段中输入第二个帐户的名称,然后按 “SAVE” 按钮。

您可以通过以下方式在帐户之间来回切换:转到仪表板的右上角,单击当前帐户的名称,然后使用显示的弹出菜单在您的帐户之间进行切换。

2. 设置Auth0 IDP(帐户2)

在本部分中,您将配置一个Auth0帐户(帐户2)作为身份提供者。您将通过注册一个应用程序来执行此操作,但是在这种情况下,您注册的“应用程序”实际上是帐户1(SAML服务提供者)的表示。

登录到账户2

在Auth0面板中:

•单击左侧的 “Applications” 链接

•单击右侧的红色 “ + CREATE APPLICATION” 按钮。

SAML身份验证如何工作

•在Name字段中,输入一个名称,例如“ My-Auth0-IDP”。

•按下蓝色的 “Save” 按钮。

•点击 "Settings" 标签。

•向下滚动并单击 "Show Advanced Settings" 链接。

•在展开的窗口中,向下滚动到 “Certificates” 部分,然后单击 “DOWNLOAD CERTIFICATE” 链接,然后从下拉列表中选择PEM,以下载PEM格式的证书。证书将下载到名为“ YOUR_TENANT.pem”的文件中。保存此文件,因为在配置另一个Auth0帐户(帐户1)时需要上传此文件。

SAML身份验证如何工作


•单击 "Endpoints" 选项卡,然后转到 "SAML" 部分。复制 “SAML Protocol URL” 字段的全部内容,并将其保存为了下一步,您需要将其粘贴到另一个Auth0帐户(帐户1)中。


SAML身份验证如何工作


接下来,创建一个用户以用于测试SAML SSO序列。在Auth0信息中心中:

•单击 “ + CREATE YOUR FIRST USER” 按钮。

SAML身份验证如何工作

•在 Email 字段中,输入测试用户的电子邮件。电子邮件的域名应与您在下面的第3节中输入的域名匹配。例如,如果您的用户是[email protected][2],则应在此处输入,然后在下面的第3步中为“电子邮件”域输入“ abc-example.com”。

•输入用户密码

•对于连接,将其保留为默认值。(用户名密码验证)

•按下蓝色的 “Save” 按钮


3.设置Auth0服务提供商(帐户1)

在本部分中,您将配置另一个Auth0帐户(帐户1),以便它知道如何与第二个Auth0帐户(帐户2)进行通信,以通过SAML协议进行单点登录。

注销帐户2,然后登录到帐户1

在Auth0面板中:

•单击左侧的 “Connections” 链接。

•在“Connections”下面的选项列表中,单击 “Enterprise”

•在屏幕中间,单击 “SAMLP Identity Provider”

SAML身份验证如何工作

•点击蓝色的 “Create New Connection” 按钮

SAML身份验证如何工作


“Create SAMLP Identity Provider” 连接窗口中,将以下信息输入“配置”选项卡。

Connection Name: 您可以输入任何名称,例如“ SAML-Auth0-IDP”

Email Domains: 在此示例中,我们将使用“锁定”小组件,因此在“电子邮件域”字段中输入将通过此连接登录的用户的电子邮件域名。例如,如果您的用户的电子邮件域名为“ abc-example.com”,则应在此字段中输入该域名。如果需要,您可以输入多个电子邮件域。确保您在第2部分中创建的测试用户的电子邮件地址的电子邮件域与您在此处输入的内容相匹配。

Sign In URL: 输入您在上面的第2部分中复制的 “SAML Protocol URL” 字段。(从帐户2的面板中,“Apps/APIs”链接,“Settings”标签,“Advanced Settings”,“ENDPOINTS”部分,“SAML”标签,“SAML Protocol URL”字段中。

Sign Out URL: 输入与上述Sign In URL相同的URL。

X509 Signing Certificate: 单击红色的 “UPLOAD CERTIFICATE...” 按钮,然后在上面的第2部分中选择从帐户2下载的.pem文件。

您现在可以忽略其余字段。

Save: 单击底部的蓝色 “SAVE” 按钮。

按下 “SAVE” 按钮后,将出现一个带有红色 “CONTINUE” 按钮的窗口。(您可能需要向上滚动才能看到它)

点击 “CONTINUE” 按钮。

在出现的窗口中,显示有关此SAML提供程序(帐户1)的元数据。您将需要收集有关该Auth0帐户(服务提供商)的两条信息,然后将其粘贴到您设置的另一个Auth0帐户(身份提供商)中。


SAML身份验证如何工作


首先,在告诉您“Entity ID”的信息列表中查找第二个项目符号。格式为urn:auth0:YOUR_TENANT:YOUR_CONNECTION_NAME。

从“ urn”一直复制并保存整个实体ID字段,直到连接名称的末尾。

在同一窗口的底部附近,有一行显示, "You can access the metadata for your connection in Auth0 here:".

将该行下方的URL复制到浏览器地址栏中。

通常,您可以在Auth0中访问SAML连接的元数据:
https://YOUR_AUTH0_DOMAIN/samlp/metadata?connection=YOUR_CONNECTION_NAME.

转到该元数据URL后,它将显示Auth0帐户1(联盟的服务提供商端)的元数据。它将看起来像以下内容,其中您的账户名代替了“ xxxxx”:


SAML身份验证如何工作


您需要找到以 “AssertionConsumerService” 开头的行,并复制 “Location” 字段的值。该网址的格式为:
https://YOUR_AUTH0_DOMAIN.auth0.com/login/callback?connection=YOUR_CONNECTION_NAME.

复制并保存此URL。这是帐户1上的URL,它将从IDP接收SAML断言。在下一节中,您将把此URL提供给IDP,以便它知道将SAML断言发送到哪里。

4.将您的服务提供商元数据添加到身份提供商

在本节中,您将返回并将有关服务提供者(帐户1)的一些信息添加到身份提供者(帐户2),以便身份提供者Auth0帐户知道如何从服务提供者Auth0接收和响应基于SAML的身份验证请求帐户。

•注销帐户1,然后重新登录到帐户2。

在Auth0面板中:对于账户2

•单击左侧的 “Applications” 链接。

•找到您先前创建的应用程序的行,然后单击应用程序名称右侧的 “Add Ons” 图标。(尖括号和斜杠图标)

•找到带有 “SAML2 WEB APP” 标签的框,然后单击圆圈开关以将其变为绿色。

SAML身份验证如何工作

•接下来,将弹出 “Addon: SAML2 Web App” 的配置窗口。确保您位于 “Settings”

标签中。

SAML身份验证如何工作


•在 “Application Callback URL” 字段中,粘贴在上面的第3部分(最后一步)中复制并保存的 Assertion Consumer Service URL


SAML身份验证如何工作


•在下面的 “Settings” 字段中,转到具有 “audience” 属性的第2行。


首先删除该行开头的“//”以取消注释。接下来,将原始值(urn:foo)替换为您在上述步骤3中保存并复制的 Entity ID 值。新的第2行应如下所示:

<code>"audience":"urn:auth0:YOUR_TENANT:YOUR_CONNECTION_NAME"/<code>

•点击屏幕底部的蓝色 “SAVE” 按钮

5.测试身份提供者

在同一屏幕上,单击红色的 “DEBUG” 按钮。这将触发帐户2(身份提供者)的登录屏幕。现在,使用帐户2的凭据登录。


SAML身份验证如何工作


如果您的配置正确,您将看到标题为 “It works!” 的屏幕。

该屏幕将向您显示由身份提供者发送的编码和解码SAML响应。

检查已解码的SAML响应并找到(大约一半)“” 标签,并确保它与您在上一个屏幕中输入的Entity ID(在步骤3中获得)匹配。

单击屏幕底部的 "Close this window"


SAML身份验证如何工作


6.注册一个用于测试端到端连接的简单HTML应用程序。

在本节中,您将在Auth0中注册一个应用程序,该应用程序将使用在上述步骤中设置的SAML连接。

确保您已登录到 “帐户1 Auth0”面板

•在Auth0面板中,点击左侧的“应用程序”链接。

•单击右侧的红色 “+ CREATE APPLICATION” 按钮。

•在 Name 字段中,输入一个名称,例如“ My-HTML-SAML-App”。

•按下蓝色的 “SAVE” 按钮。

•点击 “Settings” 标签。

•在 “Allowed Callback URLs” 字段中,输入http://jwt.io。

•允许的回调URL列表是认证后用户将重定向到的URL列表。在此处输入的URL必须与在下一步中创建的HTML代码中的“回调URL”相匹配。在此处输入的URL必须与在下一步中创建的HTML代码中的“回调URL”相匹配。通常,您将为您的应用程序输入URL,但是为了使本示例更简单,用户将仅被发送到Auth0 JWT在线工具,该工具将提供有关在身份验证序列末尾返回的JASON Web令牌的一些信息。

•按下屏幕底部的蓝色 “SAVE CHANGES” 按钮。

•在同一屏幕上,单击蓝色的 “Connections” 选项卡(在显示“Quick Start”,“Settings ”等的行中)。

•向下滚动到底部附近的 “ENTERPRISE” 部分。

SAML身份验证如何工作

•找到您在上面创建的SAML连接的行,然后单击右侧的开/关切换,将其变为绿色(表示“开”)。这将为此应用程序启用SAML连接。


7.测试从服务提供商到身份提供商的连接

在本节中,您将进行测试以确保Auth0帐户1(服务提供者)和Auth0帐户2(身份提供者)之间的SAML配置正常运行。

•在Auth0面板中,导航至:Connections -> Enterprise -> SAMLP Identity Provider

SAML身份验证如何工作

•单击您先前创建的SAML连接的三角形 “Try” 按钮。该按钮在连接名称的右侧。您可以将鼠标悬停在按钮上以显示文本标签。

SAML身份验证如何工作


•您将首先看到由服务提供商触发的Lock登录小部件。输入您先前创建的测试帐户的用户名。


然后,您将被重定向到Identity Provider的Lock登录小部件。使用您创建的测试用户的凭据登录。


SAML身份验证如何工作


如果SAML配置有效,您的浏览器将被重定向回显示 “It works!!!” 的Auth0页面。此页面将显示由Auth0身份提供者发送给Auth0服务提供者的SAML身份验证断言的内容。这意味着从Auth0服务提供商到Auth0身份提供商的SAML连接正在工作。

注意: “Try”按钮仅适用于登录到Auth0面板中的用户。您不能将其发送给匿名用户让他们尝试。

8.为测试应用程序创建HTML页面

在本部分中,您将创建一个非常简单的HTML页面,该页面将调用Auth0 Lock Widget,这将触发SAML登录序列。这将启用SAML SSO的端到端测试。

创建一个HTML页面并插入以下内容:

<code>


Click on the button to log in

/<code>

确保将YOUR-APP-CLIENT-ID 替换为您在上述步骤7中注册的应用的实际值。您可以在帐户1的Auth0仪表板中找到应用程序的客户端ID,方法是转到“应用程序”链接,然后单击应用程序名称右侧的“设置”(齿轮)图标。

将此文件保存在可以通过浏览器访问的位置。在此示例中,我们将其称为*“ hello-saml.html”。

重要的API安全说明: 如果要使用Auth0身份验证来授权API请求,请注意,根据用例,您将需要使用其他流程[3]。Auth0 idToken仅应在客户端使用。 Access tokens should be used to authorize APIs[4]。您可以阅读更多有关内容making API calls with Auth0 here.[5]

9.测试您的示例应用程序

在此步骤中,您将测试示例HTML应用程序,该示例HTML应用程序使用您在帐户1中设置的Auth0 SAML连接来通过SAML针对作为帐户SAML身份提供者的帐户2执行SSO。

•使用浏览器打开上面创建的HTML文件。您应该首先看到一个带有登录按钮的白页。

•点击 login 按钮。

Auth0 Lock小部件应显示为一个登录选项。


SAML身份验证如何工作


如果您为应用程序打开了其他连接,则 Auth0 Lock Widget 的外观可能会略有不同。如果系统提示您输入电子邮件地址,请确保您输入的电子邮件地址与在“帐户1 Auth0”面板中的应用程序的 “Settings” 选项卡中输入的域名相同。( Apps/APIs -> Settings


SAML身份验证如何工作


输入您的电子邮件地址后,“Lock”小部件上的蓝色按钮可能会带有新标签。单击可能标记为 “saml”“ACCESS” 或带有您登录时所用电子邮件地址的电子邮件域的按钮,以使用Auth0 Identity Provider发起SAML sso序列。

•您将被重定向到身份提供者以登录。

请注意,此时是否提示您输入凭据取决于您在Identity Provider上是否仍处于活动会话。通过之前进行的“try me”测试,您可能仍会在身份提供者处进行有效的会话。在这种情况下,将不会提示您再次登录,而只会重定向到HTML文件中指定的回调URL。(请记住,此回调URL也必须位于Auth0信息中心的应用程序“设置”标签中的 “Allowed Callback URLs” 中。)

如果经过了足够的时间,或者您在启动测试之前删除了浏览器cookie,那么当您重定向到身份提供程序时,系统将提示您登录。使用您在Auth0帐户2中创建的测试用户的凭据登录到身份提供者。

认证成功后,您将被重定向到HTML文件(jwt.io)中指定的回调URL。

10.故障排除

本节提供一些想法,供您检查样本是否有效。

请注意,如果您的应用程序第一次无法运行,则应在每次再次测试之前清除浏览器历史记录,最好是清除cookie。否则,浏览器可能无法获取您的html页面的最新版本,或者它的Cookie会过时,从而影响执行。

对SSO进行故障排除时,捕获交互的HTTP跟踪通常会很有帮助。有许多工具可以捕获来自浏览器的HTTP流量以进行分析。搜索“ HTTP跟踪”以查找一些内容。有了http跟踪工具后,请从头到尾捕获登录顺序,并分析跟踪以查看GET的顺序,以了解到预期顺序的距离。您应该看到从原始站点到服务提供者的重定向,然后是身份提供者的重定向,如果必须登录,则显示凭据的帖子,然后重定向回回调URL或服务提供者,最后是重定向到您的应用程序中指定的回调URL。

请务必检查以确保为您的浏览器启用了cookie和javascript。

检查以确保在Auth0信息中心中注册的应用程序的“Settings”选项卡中的“Allowed Callback URLs”字段中也列出了HTML文件中指定的回调URL。(在面板中,单击“Applications ”链接,然后单击该应用程序名称右侧的“Setttings”图标。)

http://samltool.io工具可以解码SAML断言,并且是有用的调试工具。

Auth0还提供了几个选项:

•如何将Auth0配置为SAML联合身份验证提供者。[6]

•如何将Auth0配置为充当SAML联盟中的服务提供者。[7]

•用于SSO集成的SAML配置,例如Google Apps,托管的Graphite,Litmos[8],Cisco Webex[9],Sprout Video[10],FreshDesk[11],Tableau Server,Datadog[12],Egencia,Workday和Pluralsight•如何配置Auth0以使用其他身份提供程序,例如Okta[13],OneLogin[14],PingFederate 7[15],SalesForce[16],SiteMinder[17]和SSOCircle[18]


SAML身份验证如何工作


总结

我们已经介绍了SAML身份验证的工作原理,还介绍了一些步骤以在应用程序中实现它。(注:我没有具体验证文中的实施步骤,如果感兴趣,可以按文中的步骤验证一下,如果有地方翻译出入的可以参照原文,因为这个地方我也不熟悉,可能理解有出入)

References

[1] What is SAML and How Does it Work?: https://auth0.com/blog/how-saml-authentication-works/

[2] [email protected]: mailto:[email protected]

[3] 流程:
https://auth0.com/docs/api-auth/which-oauth-flow-to-use

[4] Access tokens should be used to authorize APIs: https://auth0.com/blog/why-should-use-accesstokens-to-secure-an-api/

[5] making API calls with Auth0 here.: https://auth0.com/docs/apis

[6] 如何将Auth0配置为SAML联合身份验证提供者。:
https://auth0.com/docs/saml-idp-generic

[7] 如何将Auth0配置为充当SAML联盟中的服务提供者。:
https://auth0.com/docs/saml-sp-generic

[8] Litmos: https://auth0.com/docs/protocols/saml/saml-apps/litmos

[9] Cisco Webex: https://auth0.com/docs/protocols/saml/saml-apps/cisco-webex

[10] Sprout Video: https://auth0.com/docs/protocols/saml/saml-apps/sprout-video

[11] FreshDesk: https://auth0.com/docs/protocols/saml/saml-apps/freshdesk

[12] Datadog: https://auth0.com/docs/protocols/saml/saml-apps/datadog

[13] Okta: https://auth0.com/docs/protocols/saml/identity-providers/okta

[14] OneLogin: https://auth0.com/docs/protocols/saml/identity-providers/onelogin

[15] PingFederate 7: https://auth0.com/docs/protocols/saml/identity-providers/ping7

[16] SalesForce: https://auth0.com/docs/protocols/saml/identity-providers/salesforce

[17] SiteMinder: https://auth0.com/docs/protocols/saml/identity-providers/siteminder

[18] SSOCircle: https://auth0.com/docs/protocols/saml/identity-providers/ssocircle


分享到:


相關文章: