当前位置: 首页 > 知识库问答 >
问题:

我如何将RelayState正确地传递给Okta的ACS URLs?

贺奕
2023-03-14

如何将 RelayState 正确传递到 Okta 端 ACS URL,以便它到达输入的 IdP?

我把?RELAYState=hello 在 ACS URL 上,IdP 得到一个 SAMLRequest,中继状态为 ?RelayState=hello 哪个解码为 ?RelayState=hello.

如果我把<代码>?RelayState=相反,如我所料,带有SAMLRequest的RelayState为空。

我附上了NetworkData.xml这是从Internet Explorer捕获的。在第 447 行第 53 列中,您可以看到 Okta 编码的要 POSTT 的 RelayState https://fs.research.verafin.local/adfs/ls 包含 ?其中的 RelayState

AD FS 的 idP SSO 服务在 https://fs.research.verafin.local/adfs/ls 解码并重新编码 RelayState,保留给定的损坏值,并将其拖放到一个表单中,以便 POST 到 https://verafin.oktapreview.com:443/sso/saml2/0oaa25fc86YRTkyb60h7(Okta ACS URL)。

然后它重定向到https://verafin.oktapreview.com/?RelayState=hello

这是Okta的ACS实现中的错误吗?

如何让Okta ACS URLs在get请求中接受RelayState(SP用relay state发起SSO)?

    < li >从Okta的身份提供商处复制ACS URL from > < li >使用< code >将其粘贴到浏览器中?RelayState=hello在它之后 < li >访问结果URL

如何将 RelayState 正确传递到 Okta 端 ACS URL,以便它到达输入的 IdP?

共有2个答案

燕永昌
2023-03-14

稍加修改,您可以将fromURI用作查询参数。

最小依赖性的一个例子是Okta组织内的回环。

假设你想进入一个组织的管理界面。它位于:

/home/admin-entry

URL编码(RelayState所需的内容)是:

%2Fhome%2Fadmin-entry

您可以通过查看< code>/app/UserHome页面上管理链接的URL来验证这一点。

在 Okta 中创建一个名为环回的身份提供程序。我的示例有一个 ACS URL:

https://dev-971545.oktapreview.com/auth/saml20/loopback

创建一个链接到该标识提供者的应用程序,称为环回。它具有一个单一登录 URL(单击“登录”选项卡上的“查看设置说明”后可见)::

https://dev-971545.oktapreview.com/app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml

有两层中继状态:

  1. 您希望 Okta 将您定向到的应用:在本例中为环回应用
  2. 该应用中的路径

将中继状态传递到应用程序 SSO URL 非常简单:

https://dev-971545.oktapreview.com/app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml?RelayState=%2Fhome%2Fadmin-entry

跟着那个网址,我就来到了管理面板。

目前还没有入站 SAML。这一切都在Okta之内。让我们添加 SAML 层。

应用程序SSO URL的路径减去前导斜杠(fromURI的变通方法)后为:

app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml?RelayState=%2Fhome%2Fadmin-entry

我们对其进行URL编码,准备将其作为查询参数的值:

app%2Findependentconsultantdev927755_loopback_1%2Fexkadbfail8okn4W80h7%2Fsso%2Fsaml%3FRelayState%3D%252Fhome%252Fadmin-entry

然后,将这种疯狂作为 fromURI 查询参数放在环回标识提供者的 ACS 上:

https://dev-971545.oktapreview.com/auth/saml20/loopback?fromURI=app%2Findependentconsultantdev927755_loopback_1%2Fexkadbfail8okn4W80h7%2Fsso%2Fsaml%3FRelayState%3D%252Fhome%252Fadmin-entry

你可以说服自己,或者你可以打开你的浏览器的开发工具的网络标签,跟踪通信。ACS在斜杠前面丢弃一个RelayState(这就是我们必须删除它的原因),然后被重定向到IdP(loopback应用程序),然后被反射回ACS(保留RelayState)。登录完成,Okta使用查询参数中的RelayState重定向到环回应用SSO URL。Okta对其进行处理,并重定向到自身,然后重定向到嵌入式RelayState,它会将您带到管理仪表板。

这是一个从Okta的SP发起的流到另一个应用程序的深度链接的工作示例,Okta作为SAML中介。

巢宏富
2023-03-14

接受的答案不再是最新的,Okta 建议现在不要使用 fromURI,并建议使用此处定义的 SAML DeepLinks

使用 SAML 深层链接重定向

成功通过第三方IdP验证后,使用SAML深层链接自动将用户重定向到应用程序。要使用深层链接,请将这三个部分组合成一个URL:

SP ACS URL
For example: https://{myOktaDomain}.com/sso/saml2/:idpId
The app to which the user is automatically redirected after successfully authenticating with the IdP
For example: /app/:app-location/:appId/sso/saml
Optionally, if the app is an outbound SAML app, you can specify the relayState passed to it.
For example: ?RelayState=:anyUrlEncodedValue
 类似资料:
  • 问题内容: 我正在尝试找出在我的express.js路由之间传递mysql连接(使用node- mysql)的最佳方法。我正在动态添加每个路由(在路由中为每个文件循环使用),这意味着我不能只是将连接传递给需要它的路由。我要么需要将其传递到每条路线,要么根本不需要传递。我不喜欢将其传递给不需要它的想法,因此我创建了一个dbConnection.js,可以根据需要单独导入路由。问题是我认为我做的不正确

  • 有人能告诉我如何为IDP发起的SSO连接传递RelayState吗?我们有SSO工作,但想深度链接到服务提供商应用程序中的页面。他们在RelayState上指示我们通过,但我不知道如何格式化Okta的URL。我们正在使用应用程序嵌入式链接,并希望将RelayState附加到查询字符串中。

  • 问题内容: 在我的 Ubuntu 16.04上, 我将 IntelliJ IDEA ultima 2017.2 与 节点v6.11.2 和 npm v3.10.10 一起使用,并想调试一个具有以下 package.json 开始 条目的node.js应用程序: 根据控制台输出和类似的SO问题我需要添加 $ NODE_DEBUG_OPTION 作为第一个参数(用于节点),以避免 Connection

  • 问题内容: 我正在尝试学习go,并且一开始我想尝试组装一个超级简单的Web服务器来控制iTunes。过去,我已经多次达到这个目的,并认为我可以在这里简单地取消对osascript的调用。 注释掉的“ say 5”命令 确实 起作用。 我收到的回应如下: 我不确定从这里要去哪里,任何方向都将不胜感激。 问题答案: 我明白了 我认为exec.Command(…)如果参数中有空格,则在参数中添加双引号,

  • 我需要将一些信息从编译脚本传递到模板Haskell中。目前编译脚本将信息保存在系统环境中,所以我只是使用包装在中。是否有更好的方法,例如将一些参数传递给(类似于C预处理器的),或者可能是专门为此设计的方法?

  • [编辑:url中的“<”已被删除,只是它不被视为标记,因此未显示] views.py test.py