Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Azure AD ADAL进行ASP.NET MVC用户身份验证_C#_Asp.net_Azure_Azure Active Directory - Fatal编程技术网

C# 通过Azure AD ADAL进行ASP.NET MVC用户身份验证

C# 通过Azure AD ADAL进行ASP.NET MVC用户身份验证,c#,asp.net,azure,azure-active-directory,C#,Asp.net,Azure,Azure Active Directory,我有一个具有Identity 2身份验证的ASP.NET MVC应用程序,该应用程序部署为Azure应用程序。我正在尝试的是在此应用程序中使用Azure Active Directory身份验证,以便在Active Directory中创建的用户(此广告是在应用程序所在的Azure订阅中创建的)可以在应用程序中进行身份验证 对于标准Active Directory,我将使用LDAP(S)协议与域控制器进行身份验证,但在Azure AD中,我被告知使用ADAL库,因为不支持LDAP协议(?) 我已

我有一个具有Identity 2身份验证的ASP.NET MVC应用程序,该应用程序部署为Azure应用程序。我正在尝试的是在此应用程序中使用Azure Active Directory身份验证,以便在Active Directory中创建的用户(此广告是在应用程序所在的Azure订阅中创建的)可以在应用程序中进行身份验证

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

我已经回顾了ADAL的许多实现,但我不确定需要执行的操作的确切流程。
在官方的Github上,我回顾了
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();
}
private const string ClientId=“1950a258-227b-4e31-a9cf-717495945fc2”;
private const string User=“”;//也可以是空字符串,用于测试IWA和U/P
私有常量字符串资源=”https://graph.windows.net";
静态void main(字符串[]参数){
var context=新的AuthenticationContext(“https://login.windows.net/common,true,新文件缓存());
RunAppAsync(context.Wait();
}
专用静态异步任务RunAppAsync(AuthenticationContext上下文){

任务"在我的情况下保持不变?如何指定我在Azure中创建的Active Directory域的名称?使用Azure AD中手动创建的用户帐户进行身份验证时,这是正确的操作流吗?

是的,不支持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的用户将无法登录。

谢谢您的回答。因此,租户id是在Azure中通过此身份验证机制识别我的特定active directory的方式?关于弹出的Web浏览器,我想您的意思是,此代码将成为ASP.NET MVC网站的一部分,该网站已具有登录表单t在这个特定的WinForms示例中(?)。我希望能够登录的唯一用户是我在Azure AD中创建的帐户。在这种情况下,我的工作流是否更不安全?是的,这是目录的唯一标识符。MVC需要进行不同的配置,并且有相应的示例。在其中,我们使用重定向对用户进行身份验证。我强烈建议您请不要构建您自己的登录表单。正如我所说,MFA不起作用,密码过期的用户无法登录,来宾用户可能无法登录。处理用户密码也是一种不好的做法。请理解。您能给我指一个集成此特定身份验证流的MVC网站的特定示例吗?此示例适用于asp.net MVC。还有asp.net core的较新示例。此处的示例配置为使用公用终结点,您希望将公用更改为租户id。