我有一个带有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中手动创建的用户帐户进行身份验证时,这是正确的操作流程吗?
答案 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的用户将无法登录。