使用 Azure Active Directory 身份验证而不重定向到 Microsoft

Posted

技术标签:

【中文标题】使用 Azure Active Directory 身份验证而不重定向到 Microsoft【英文标题】:Use Azure Active Directory Authentication without redirecting to Microsoft 【发布时间】:2019-06-16 10:41:19 【问题描述】:

是否可以简单地将用户名和密码传递到 Azure Active Directory 并取回不记名令牌,而不是将用户发送到 login.microsoft.com 网站?

重定向会中断我的 Visual Studio 调试,并且无法查看正在发生的事情。

【问题讨论】:

它不应该破坏你的调试。您是否将 localhost 网址注册为重定向? 当然可以。它返回到 localhost 但仍会中断调试。 “破坏调试”有点含糊。你能提供更多细节吗?我没有遇到过导致调试问题的 Azure AD 身份验证。 用户将被重定向到 AAD 的登录页面以在代码流中输入他们的凭据,AAD 将验证凭据并颁发令牌,该过程由 AAD 处理,在此过程中您要调试什么? 如果我在重定向到 login.microsoft.com 以执行登录后立即在 Visual Studio 中运行项目,则运行停止。微软在之后重定向回该网站,但到那时为时已晚。如果我再次运行它,它只会在新窗口中打开项目。 【参考方案1】:

不太确定您的确切设置是什么。但是,可以使用 Password Grant 直接获取 Bearer Token。

我只推荐这个用于测试目的。仅应考虑在生产场景中使用此授权。

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Username-Password-Authentication

string authority = "https://login.microsoftonline.com/contoso.com";
string[] scopes = new string[]  "user.read" ;
PublicClientApplication app = new PublicClientApplication(clientId, authority);


    try
    
        var securePassword = new SecureString();
        foreach (char c in "dummy")        // you should fetch the password
            securePassword.AppendChar(c);  // keystroke by keystroke

        result = await app.AcquireTokenByUsernamePasswordAsync(scopes, "joe@contoso.com",
                                                               securePassword);
    
    catch(MsalException)
    
      // See details below
    

Console.WriteLine(result.Account.Username);

您也可以使用 Postman 或类似工具:

curl -X POST \
   https://login.windows.net/<tenant>/oauth2/token \
   -H 'Accept: application/json' \
   -H 'Content-Type: application/x-www-form-urlencoded' \
   -d 'grant_type=password&scope=openid&resource=<resourceUri>&client_id=<yourClientId>&client_secret=<clientSecret>&username=<username>&password=<password>'

【讨论】:

以上是关于使用 Azure Active Directory 身份验证而不重定向到 Microsoft的主要内容,如果未能解决你的问题,请参考以下文章

使用Laravel的Azure Active Directory SSO

使用Xamarin.iOS进行Azure Active Directory身份验证过程

用于查询Azure Active Directory的Azure服务

使用 DataGrip - Active Directory 连接到 Azure 数据库

使用证书的 Azure Active Directory 守护程序客户端

Active Directory 从浏览器访问 Azure 存储