服务现在重定向 URL 修剪为"&"字符



我的Web应用程序重定向到ServiceNow应用程序并使用SSO登录。我希望用户重定向到ServiceNow平台上的某些内容

重定向URL:app?sys_kb_id=d34cecb01bdcd0102fsw&id=kb_article_view&sysparam_rank=1&sysparam_tsqueryId=37ac2ea11b6689d4db49f2

我面临的问题是重定向URL被修剪为第一个参数。这是因为已经使用的工作流以及&

我们在ServiceNow中使用的工作流程如下,

注销-->使用sso登录-->身份验证重定向

此工作流非常重要,因为客户端在共享硬件上使用web应用程序。为了防止跨用户访问,我们在每次打开ServiceNow应用程序时注销当前用户。

注销请求

https://example.service-now.com/logout.do?glide_sso_id=<sso-id>&logout_first=true&sysparm_goto_url=%2Flogin_with_sso.do%3Fglide_sso_id%3D<sso-id>%26login_redirect_uri%3Dapp%3Fsys_kb_id%3Dd34cecb01bdcb0102f09986a23shak90%26id%3Dkb_article_view%26sysparm_rank%3D1%26sysparm_tsqueryId%3D37ac2ea11b6689d4db49f2ff034jls72
Payload:{
sysparm_goto_url=%2Flogin_with_sso.do%3Fglide_sso_id%3D<sso-id>%26login_redirect_uri%3Dmyhr%3Fsys_kb_id%3Dd34cecb01bdcb0102f09986a23shak90%26id%3Dkb_article_view%26sysparm_rank%3D1%26sysparm_tsqueryId%3D37ac2ea11b6689d4db49f2ff034jls72
}

登录请求

https://example.service-now.com/login_with_sso.do?glide_sso_id=<sso-id>&login_redirect_uri=app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72
Payload: {
login_redirect_uri=app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72
}

登录API解析重定向URL,这将导致编码的URL字符被解码。

由于"&quot;在重定向URL中的字符,URL分解为单独的查询参数,

requiredRedirectUrl: app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72
actualRedirectUrl: app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90
++ id=kb_article_view
++ sysparm_rank=1
++ sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72

由于重定向URL不完整,用户将访问登录页,而不是内容页。

RequiredEndUrl: https://example.service-now.com/app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72
ActualEndUrl: https://example.service-now.com/app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90

是否有任何方法可以确保重定向URL不会被登录API解码?

或者是否有其他方法可以达到要求。

我找到了一个修复程序。问题是注销API在调用登录API之前解码重定向URL,这导致了一个问题&quot;没有逃脱。

我对重定向URL进行了两次编码(Double Encode URL(,然后将其添加到注销请求中。这样,当URL最初被解码时,字符仍然保持转义,并且实际的重定向URL被发送到最后一个API调用。

Redirect URL: app?sys_kb_id=d34cecb01bdcb0102f09986a23shak90&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=37ac2ea11b6689d4db49f2ff034jls72
Double Encoded URL: app%253Fsys_kb_id%253Dd34cecb01bdcb0102f09986a23shak90%2526id%253Dkb_article_view%2526sysparm_rank%253D1%2526sysparm_tsqueryId%253D37ac2ea11b6689d4db49f2ff034jls72

最新更新