Azure Active Directory与MVC,客户端和资源标识相同的应用程序

时间:2015-04-17 11:58:49

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

跟进这个问题:

How to do both Azure Active Directory Single Sign On and Forms Authentications on ASP.NET MVC

我尝试在默认MVC 4的Login操作上编写简单代码,它使用默认的Forms身份验证和Azure Active Directory SSO:

public async Task<ActionResult> Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
        return RedirectToLocal(returnUrl);
    }

    authContext = new AuthenticationContext(authority, new TokenCache());
    var result = await authContext.AcquireTokenAsync(resourceId, clientId, new UserCredential(model.UserName, model.Password));

    // more code
}

因此,如果正常登录WebSecurity.Login不成功,我会尝试使用带有凭据(用户名/密码)的ADAL.NET从AAD获取令牌:http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

运行应用程序时,我收到了Azure的错误:

  

AADSTS90027:客户端'[ClientId]'和资源'[ResouceId]'标识同一个应用程序。

我不确定在MVC登录操作中直接使用ADAL和凭证是否真的有意义。请有人给我一些暗示。

1 个答案:

答案 0 :(得分:4)

ADAL并不意味着在Web应用程序中实现Web登录。 ADAL帮助应用程序获取用于访问其他资源的令牌:换句话说,它可以帮助您的应用程序成为客户端。此外,用户名/密码在Web应用程序中不可用,因为它仅用于本机应用程序。 要同时使用FormsAuth和Azure AD,请考虑添加ASP.NET身份中间件和OpenId Connect中间件。 OpenId Connect中间件是用于通过Azure AD实现Web SSO的库。