【发布时间】:2017-10-26 06:03:03
【问题描述】:
我每隔几个月就会重新审视这个问题,但似乎无处可去。身份验证设置以模板身份服务器 asp.net mvc、sql db 开始,一切正常。使用此tutorial 将 Google 设置为外部身份验证器。尽管似乎没有 Microsoft 作为 MVC5 的外部提供者的教程,但尝试遵循 Microsoft 的类似过程,只有 asp.net core 2。因此,为两个提供者设置客户端 ID 和密码,在开发网站上注册。在应用程序注册门户中,我将重定向为https://myapp.azurewebsites.net/signin-microsoft。在 RouteConfig 中,我添加了以下路由:
routes.MapRoute(
name: "signin-google",
url: "signin-google",
defaults: new { controller = "Account", action = "ExternalLoginCallback" });
routes.MapRoute(
name: "signin-microsoft",
url: "signin-microsoft",
defaults: new { controller = "Account", action = "ExternalLoginCallback" });
我不记得在教程中看到过,在这一点上,坦率地说,我不记得为什么谷歌会在那里。但是在我的项目中挖掘时,我看到了谷歌的路线,所以我为 MS 添加了一条,希望它可以解决问题。
错误
当我单击链接以使用 MS id 登录时,我看到一个页面显示
我们无法完成您的请求 Microsoft 帐户遇到技术问题。请稍后再试。 更能说明问题的是返回网址:
https://login.live.com/err.srf?lc=1033#error=invalid_request&error_description=The+provided+value+for+the+input+parameter+'redirect_uri'+is+not+valid.+The+expected+value+is+'https://login.live.com/oauth20_desktop.srf'+or+a+URL+which+matches+the+redirect+URI+registered+for+this+client+application.&state=VMXVAOBL8eJs8OVRabazU4mJbDZFtJR55mx5BVtLUX-mptCDJYMOqep0Ud4CyX2eJwkJY4SutIcCrxJBILueR-h5vUOSdn1lt-qCDJ5xI3fNuLuJTyE84uUtPTzC1hXHLAURtX7gLcGs-OIF9dYz8eN0nvgTQiVSB9GrPnj5o4KTS6pAwsad8qw5UWpFnrlSXd3eJo83CzrWqeh9YSsxkEVaKN5LKB_rzeM4gQdiD5Q
我会抽出重要的部分:
+提供+值+for++输入+参数+'redirect_uri'+is+not+valid.++预期+值+is+'https://login.live.com/oauth20_desktop.srf'+or+a+URL+which+matches+ the+redirect+URI+registered+for+this+client+application.&state
Core2 教程中提到了这一点,但没有在应用程序中修复它。如果我的应用程序本身有某个地方我应该设置它,我无法弄清楚。我已经从登录页面通过控制器跟踪了代码中的步骤,但我看不到应用程序中的 redirecturl 设置位置。阅读此thread 我意识到我应该使用提琴手来检查标头,它最终发送的重定向是
http%3A%2F%2Fmyapp.azurewebsites.net%2Fsignin-microsoft
...不是安全版本。因此,如果这是我的麻烦的根源,我该如何设置托管在 Azure 中的生产服务器以通过 https 发出该请求?请注意,MS 开发人员不会让您在 url 中使用 http 进行重定向。
【问题讨论】:
标签: asp.net-mvc azure oauth-2.0