繁体   English   中英

Azure AD 应用程序注册中未明确列出的重定向 URI 使用 State 参数

[英]Using the State Parameter for Redirect URIs that Are Not Listed Explicitly in Azure AD Application Registration

我的应用程序作为 Azure 应用程序服务托管,喜欢 email 链接到用户,告诉他们轮到他们工作流程了。 他们单击它,应该能够登录并完成他们需要做的工作。 但是,我收到错误AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application:... 在大多数情况下,该链接在 URL 路由或 URL 参数中包含特定信息,我不可能列出所有可能在 Azure AD 应用程序注册身份验证刀片中作为重定向 URI 出现的可能性。 我读过的所有内容都说要使用 state 参数,但我真的不知道该怎么做,也找不到任何真实可靠的例子。

我 email a URL 以这种形式给我的用户: https://myapp.mycompany.com/edit?user=42&created=somedatetime 当您单击它时,它会在此处检查身份验证:

https://login.microsoftonline.com/myTennantId/oauth2/authorize
?response_type=id_token
&client_id=myClientId
&redirect_uri=https%3A%2F%2Fmyapp.mycompany.com%2Fedit?user=42&created=somedatetime
&state=33e9c826-5311-45b2-be01-5172862be124
&client-request-id=ba51438f-cd22-4fc4-8ea0-44fd69f3153b
&x-client-SKU=Js
&x-client-Ver=1.0.17
&nonce=08f67a4e-1bf9-4c43-9771-e0b61684b465

现在在 URL 中有一个 state 参数,但我不知道它来自哪里或如何生成(显然它是一个 GUID,但我的意思是我看不到它如何映射到任何类型的状态)。 此外,我必须从我的重定向 URI 参数中删除编码参数,然后它在哪里 go? 我只是对如何设置我的应用程序以使用该 state 参数感到困惑。

有趣的是,我现在真的只是看到了这一点,因为我为这个现有的应用程序创建了一个新的应用程序服务应用程序,它使用我之前使用的相同的 Azure AD 应用程序注册。 我觉得我完全误解了这一点。

任何人(真的)知道如何解决这个问题?

请检查以下给出的参考资料是否可以缩小您的问题范围。

  1. 我会要求您检查应用程序注册中的“身份验证刀片”以获取所需应用程序“应用程序 ID”,并查看代码配置中给出的回复 url 是否与 azure 广告中注册的相同。确保两者相同。

(或者)

  1. 如果请求中包含 state 参数,则响应中应出现相同的值。(那么它是来自安全用户的成功响应)。 这有助于检测跨站点请求伪造 (CSRF) 攻击。因此 azure 有助于保护应用程序。

state 参数是一个字符串,因此您可以在其中编码任何其他信息。 您在启动身份验证请求时发送一个随机值,并在处理响应时验证接收到的值。 您在客户端应用程序端(在 cookies、session 或 localstorage 中)存储一些允许您执行验证的内容。

如果您收到不匹配的 state 响应,您可以推断您可能是攻击目标,因为这要么是对未经请求的请求的响应,要么是有人试图伪造响应。

在构建授权请求时,您可能需要在 state 参数或任何项目相关 ID 或任何内容中传递一个随机字符串值。 参考

您可以使用RedirectToIdentityProvider注入您的参数并尝试使用 Content-Type: application/x-www-form-urlencoded

请检查以下可能有帮助的参考资料。

  1. asp.net mvc - 将参数传递给 Azure Active Directory 身份验证 - 堆栈内存溢出
  2. 如何使用“state”参数注入自定义参数
  3. 在身份验证请求中传递自定义 state
  4. 通过 state - Honza 的 Blarg

由于 URL 长度的限制,某些浏览器会出现此错误。 尝试将 storeAuthStateInCookie 设置为“true”以保存缓存。 例如:

cache: {
        cacheLocation: "localStorage",
        storeAuthStateInCookie: true, 
    },

否则,您可以就此提出支持请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM