【问题标题】:Oauth2 works for google but not microsoft in ASP.NET MVC 5 web appOauth2 适用于谷歌,但不适用于 ASP.NET MVC 5 Web 应用程序中的微软
【发布时间】: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


    【解决方案1】:

    除非其他人能以不同的方式告诉我,否则我想我已经回答了我自己的问题。由于我使用的是免费的 Azure 计划 atm,因此不支持 SSL(基本或更高版本),并且永远不会使用 https 进行调用。这是有道理的。同时,MS 开发门户仅接受带有 https 的 url。我还发现了 here 关于在我的网络应用程序上强制执行 https。基本上在 web.config 中添加一个规则,如下所示:

    <rule name="Force HTTPS" enabled="true">
         <match url="(.*)" ignoreCase="false" />
         <conditions>
           <add input="{HTTPS}" pattern="off" />
         </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
       </rule>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2022-08-16
      • 2018-09-17
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多