Microsoft 密码重置 - 包含重置后重定向 URI 的传递参数

Posted

技术标签:

【中文标题】Microsoft 密码重置 - 包含重置后重定向 URI 的传递参数【英文标题】:Microsoft Password Reset - Pass parameter that contains redirect URI for after reset 【发布时间】:2019-08-30 01:55:50 【问题描述】:

我们使用 OAuth 2 和 Microsoft Azure Active Directory 进行单点登录。当用户注销时,我们将它们传递到以下 URL,我们可以在其中传递 post_logout_redirect_uri 查询参数:

https://login.microsoftonline.com/<tenant-id>/oauth2/logout?post_logout_redirect_uri=https%3A%2F%2Fexample.com%2F

当用户尝试登录我们的站点时,如果他们未通过身份验证,他们会被定向到 Microsoft 登录页面,我们也会在此处传递一个 redirect_uri 参数(以及一些其他不相关的查询参数)。

https://login.microsoftonline.com/<tenant-id>/oauth2/authorize?redirect_uri=https%3A%2F%2Fexample.com%2F

如果用户单击登录页面上的忘记密码链接,他们可以使用 Microsoft 的自助服务密码重置来重置他们的密码,然后他们会获得一个使用新密码登录的链接(如下所示)。点击该链接会将他们带回登录页面,在他们登录后,他们会被重定向回我们的网站。

但是,我们也发送了一个链接供用户直接访问密码重置页面:

https://passwordreset.microsoftonline.com

当用户点击此链接并重置其密码时,To sign in with your new password, click here. 链接不会显示。是否有任何方法可以在此 URL 中传递查询参数,类似于登录和注销端点,以显示该链接并重定向到为该参数传递的值?

我尝试使用redirect_uripost_reset_redirect_uri 无济于事,并且找不到任何相关文档。

【问题讨论】:

【参考方案1】:

查看密码重置流程及其使用的所有查询字符串参数,我能够使用查询字符串参数ru 获取To sign in with your new password, click here. 的链接

您应该尝试的新链接

https://passwordreset.microsoftonline.com?ru=url encoded value for return url

例子:

https://passwordreset.microsoftonline.com?ru=https%3A%2F%2Flogin.microsoftonline.com%2F<tenant-id>%2Foauth2%2Fauthorize%3Fredirect_uri%3Dhttps%253A%252F%252Fexample.com%252F%26client_id%3DmyclientGUID%26response_type%3Did_token%26state%3D123456%26nonce%3DGUID

注意:我使用的 URL 编码值与我尝试登录我的站点时使用的 URL 和参数基本相同,即当您看到 Microsoft 登录页面作为常规的一部分时,从浏览器获取 URL登录网站。 (与密码重置无关)。然后为 nonce 提供了一个新的随机 GUID,并为状态参数提供了另一个随机值。

免责声明:我没有找到任何官方文档。它更多的是通过常规密码重置流程创建的 HTTP 请求。

【讨论】:

不幸的是,我的应用程序将无法生成所有适当的参数,因为我相信其中一些是 oauth 令牌和指示状态的参数等(我相信其中一些是生成的) Azure 本身)。我尝试仅将我的应用程序的 URL 作为 ru 参数传递,但链接没有显示。 啊,我可以关闭 Azure 生成的参数,但它可以工作!生成链接的应用程序唯一需要知道的是租户 ID 和客户端 ID,它们是我可以通过属性文件提供给它的静态值。

以上是关于Microsoft 密码重置 - 包含重置后重定向 URI 的传递参数的主要内容,如果未能解决你的问题,请参考以下文章

使用gmail和Django注册不会重置密码电子邮件

Django 在密码重置时不会重定向到正确的路径

使用设计重置密码问题

在codeigniter中重置密码后如何重定向

Microsoft.AspNetCore.Identity 和 EF Core,在测试旧密码时重置用户密码

iOS重定向到特定的密码重置页面?