通过Azure AD ADAL的ASP.NET MVC用户身份验证

时间:2019-07-21 15:30:15

标签: c# asp.net azure azure-active-directory

我有一个带有Identity 2身份验证的ASP.NET MVC应用程序,该应用程序被部署为Azure应用程序。我想做的是在此应用程序中使用Azure Active Directory身份验证,以便在Active Directory中创建的用户(此AD在与应用程序驻留的Azure相同的订阅中创建)可以在应用程序中进行身份验证。

对于标准的Active Directory,我将使用LDAP(S)协议与域控制器进行身份验证,但是在Azure AD中,由于不支持LDAP协议,我被告知使用ADAL库。

我已经审查了ADAL的许多实现方式,但是我不确定需要执行的确切操作流程。
我从Github官方repo审查了AdalDesktopTestApp项目,并总结了以下认证机制:

private const string ClientId = "1950a258-227b-4e31-a9cf-717495945fc2";
private const string User = ""; // can also be empty string for testing IWA and U/P
private const string Resource = "https://graph.windows.net";



static void main(string[] args) {
     var context = new AuthenticationContext("https://login.windows.net/common", true, new FileCache());
     RunAppAsync(context).Wait();
}

private static async Task RunAppAsync(AuthenticationContext context) {
    Task<AuthenticationResult> authTask = null;
    authTask = context.AcquireTokenAsync(Resource, ClientId, new UserPasswordCredential(User, Console.ReadLine()));
    await FetchTokenAsync(authTask).ConfigureAwait(false);
}

private static async Task FetchTokenAsync(Task<AuthenticationResult> authTask)
{
    await authTask.ConfigureAwait(false);

    Console.BackgroundColor = ConsoleColor.DarkGreen;
    Console.WriteLine("Token is {0}", authTask.Result.AccessToken);
    Console.ResetColor();
}

如果从Azure应用程序运行此代码,ClientId会变成什么?

执行Resource变量和AuthenticationContext的第一个参数 在我的情况下,“ https://login.windows.net/common”保持不变吗?如何指定在Azure中创建的Active Directory域的名称?使用在Azure AD中手动创建的用户帐户进行身份验证时,这是正确的操作流程吗?

1 个答案:

答案 0 :(得分:2)

是的,不支持LDAP。您需要使用OAuth / OpenID Connect,它可以通过ADAL或MSAL进行简化(这是更新的版本,并且可以在v2端点上使用)。

客户端ID是您在Azure AD中注册的应用程序的ID。 有时也称为应用程序ID。 资源标识您要呼叫的内容。 样本中的资源是Azure AD Graph API的标识符。 您将使用例如https://graph.microsoft.com用于更新的Microsoft Graph API。 您获取的访问令牌仅对该API有效。 请注意,MSAL / v2不使用资源,而是使用范围。

带有“ common”的URL是您的权限。 这说明您要允许哪些帐户登录您的应用程序。 Common允许来自任何Azure AD租户的用户登录到您的应用程序。 (您的应用程序也必须同时是多租户) 如果只希望支持特定的Azure AD租户,则将其指定为https://login.microsoftonline.com/your-aad-tenant-id。 要使其保持多租户状态,请将其设置为https://login.microsoftonline.com/common

您正在应用中使用不太安全的资源所有者密码凭据授予流程。 您应该使用重载弹出一个Web浏览器,该浏览器允许用户正确登录。 例如,在您的应用中,拥有MFA的用户将无法登录。