GetExternalLoginInfo()返回null

时间:2018-01-12 17:18:45

标签: asp.net-mvc authentication callback oauth-2.0 owin

我已经使用https://apps.dev.microsoft.com/和(在本地主机上时)注册了我的mvc应用程序,在更新了使用微软身份验证设法验证用户(使用clientid和secret)的所有NuGet包之后 - 运行正常!让我们忘记浪费的时间,发现我必须使用https://localhost:xxxx/signin-microsoft - 认为我必须提供我的回调方法端点。

现在,我必须做同样的事情,但是在应用程序注册部分中使用我在Azure Active Directory上注册的应用程序对用户进行身份验证。 注意:用户不是在azure中注册,而是在其他域上注册,但使用Microsoft身份验证。我刚刚更改了客户端ID和密码,以便在注册应用程序时指定在azure上生成的内容。登录HOWEVER后正在访问我的Callback方法,我需要读取用户电子邮件的loginInfo对象为NULL。我确保我有最新的软件包更新,我试图搜索花了3天时间查找只使用租户ID,权限等的应用程序。

我只需要使用在Microsoft AAD(Azure活动目录 - 注册的应用程序部分)上注册的应用程序使用Microsoft身份验证进行签名的个人帐户。我知道它有效,因为我已经看到它在其他应用程序上使用php,但是微软的代码/库并没有。

顺便说一句,我试过添加范围,调用同步到没有好处。我也尝试检查传入的数据,并说它拒绝访问,我非常确定客户端ID和密码是否正常。也许回复网址错了?但我提供的任何其他回调都会导致错误的请求,并且回调方法至少会被触发。我还启用了#34;签署用户"和"登录并阅读用户个人资料"来自azure的权限。我的想法已经不多了。任何帮助将非常感激。感谢

代码与使用个人帐户创建新的mvc Web应用程序时提供的代码相同,即在Startup.Auth.cs中:我有这个重要的部分和其他代码

var myObj = new MicrosoftAccountAuthenticationOptions()
        {
            ClientId = "xxx",
            ClientSecret = "xxx",

        };
        myObj.Scope.Add("openid");
        myObj.Scope.Add("email");
       // myObj.Scope.Add("User.Read");
        app.UseMicrosoftAccountAuthentication(myObj);

在AccountController.cs中,我有这个方法正在初始化对microsoft的请求

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult ExternalLogin(string provider, string returnUrl)
    {
        // Request a redirect to the external login provider
        return new ChallengeResult(provider, 
   Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl 
}));
    }

和处理回调响应的这个(部分)方法:

  [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
       var loginInfo = await  
   AuthenticationManager.GetExternalLoginInfoAsync();
    //...
    }

1 个答案:

答案 0 :(得分:0)

好的解决了。我在我的问题前面提供的解决方案适用于https://apps.dev.microsoft.com/上注册的应用程序。当我在AzureAD上注册我的应用程序时,必须按照这种方法以不同的方式完成:https://docs.microsoft.com/en-us/azure/active-directory/develop/guidedsetups/active-directory-aspnetwebapp