Microsoft帐户使用身份提供商登录

时间:2016-12-22 02:48:57

标签: asp.net-mvc azure azure-active-directory

我在Microsoft Azure中有应用程序。我需要使用他们现有的Microsoft帐户实现用户登录。我为谷歌帐户做了同样的事情。在谷歌登录;提示登录并获取用户电子邮件,然后我检查数据库中的电子邮件。但我仍然无法实现与Microsoft帐户相同的方案。我尝试使用Microsoft Azure OpenId。它说用户没有被分配到tenent。我需要这样做而不会将用户分配到我的网站。

https://docs.microsoft.com/en-us/azure/active-directory/active-directory-protocols-openid-connect-code

我想让用户签名并获取用户信息。

我也跟着这个tutorial。它给出了以下错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

据我了解,您面临两个问题:1)当用户使用其Microsoft帐户登录时未收到电子邮件2)使用OpenID连接时出现无效请求错误。

Microsoft帐户登录问题

在我们的应用程序中,我们还要求用户使用他们的Microsoft帐户登录。为了获得电子邮件地址,您实际上必须以用户同意的形式提出要求。这是通过在您的请求中指定适当的Scopes来完成的。您需要提供wl.emails范围。以下是我们在应用程序中配置Microsoft帐户身份验证的方法(在Startup.Auth.cs文件中)。

        var microsoftAuthOptions = new MicrosoftAccountAuthenticationOptions()
        {
            Caption = "Microsoft Account",
            ClientId = <your client id>,
            ClientSecret = <your client secret>,
        };
        microsoftAuthOptions.Scope.Add("wl.emails,wl.signin");//Email scope also returns the user name, so that should be fine. We don't need wl.basic.
        app.UseMicrosoftAccountAuthentication(microsoftAuthOptions);

现在,当登录过程完成后,您会看到用户的电子邮件地址作为其中一项声明。

Azure AD问题

这里发生的是您将用户重定向到common端点(https://login.microsoftonline.com/common/<rest of the stuff>)进行身份验证,然后要求用户向该common租户中的应用程序授予权限。由于用户无权这样做,因此您收到此错误。

当您需要做的是要求用户提供Azure AD的URL(例如something.onmicrosoft.com)并将用户重定向到用于身份验证和授权的用户(https://login.microsoftonline.com/something.onmicrosoft.com/<rest of the stuff>)。因为现在用户正在针对特定Azure AD进行身份验证,所以如果AD管理员已授予他们适当的权限,则不应该出现此错误。请注意,用户登录的Microsoft帐户必须存在于该Azure AD中,并且AD管理员允许用户向第三方应用授予权限,否则您仍会收到此错误。