OAuth 2.0隐式流程适用于localhost,但不适用于将站点部署到Azure的情况

时间:2016-09-08 13:36:19

标签: asp.net-mvc oauth-2.0 azure-web-sites onedrive

我修改了连接OneDrive的示例代码,并允许用户将图像上传/下载到OneDrive。我已经部署了MVC5 app here。下面是javascript代码的关键部分

$(document).ready(function () {
            var client_id = "61029bc2-373d-46d6-935b-ab34b325ef3a",
                scope = ["wl.signin", "wl.basic", "wl.skydrive", "wl.skydrive_update"],
                //redirect_uri = "http://localhost:61727/home/callback";  //when redirect_uri is configured as localhost everything works find
                  redirect_uri = "http://onedriveuploaddemo.azurewebsites.net/home/callback"; //When I deploy application to azure get error saying invalid redirect_uri

            WL.Event.subscribe("auth.login", onLogin);
            WL.Event.subscribe("auth.sessionChange", onSessionChange);
            WL.init({ client_id: client_id, redirect_uri: redirect_uri, response_type: "token", scope: scope });
            WL.ui({ name: "signin", element: "signin" });

        });

请参阅下面的应用配置

enter image description here

  1. 当我配置' redirect_uri'作为本地主机,即( http://localhost:61727/home/callback )。应用按预期工作。当我点击登录按钮时,它会将我重定向到Windows Live登录屏幕,然后我可以输入我的用户名/密码,然后我被重定向回' redirect_url'
  2. 但是当我改变' redirect_uri'这是指向在azure中托管的页面。我已经托管了MVC应用here。当我点击'登录'按钮它打开对话框并立即关闭它。我无法获取错误消息。但这似乎是' redirect_uri'
  3. 的一个问题
      

    我是否需要在Azure中启用任何设置才能完成此操作?

    注意:在配置' redirect_uri'我正在两个地方更改它,例如在MVC应用程序和应用程序注册门户网站中。两者都是一样的。

1 个答案:

答案 0 :(得分:3)

使用Fiddler4,我能够捕获错误消息,即: The provided value for the input parameter 'redirect_uri' is not valid. The scope 'wl.signin wl.basic wl.skydrive wl.skydrive_update' requires that the request must be sent over a secure connection using SSL.

Microsoft现在要求重定向URI对所有身份验证重定向使用SSL。 Localhost是免税的,这就是它在那里工作的原因。如果您想允许使用Microsoft帐户登录,则需要在您的站点上获得SSL支持。

另外:看起来你正在使用非常旧的LiveSDK for JavaScript,因为它不支持更新的OneDrive API,所以不再推荐使用它。虽然没有适用于JavaScript的OneDrive SDK,但您可能会发现OneDrive-Explorer-JS中的示例代码有助于在不使用LiveSDK代码的情况下处理身份验证。特别是,odauth.js应该完成你需要的所有事情。