将AuthenticationResult转变为MVC会话

时间:2015-10-15 16:34:54

标签: asp.net-mvc asp.net-web-api azure-active-directory

什么?

我有一个API,它使用用户名和密码,可以返回AuthenticationResult。我想利用该令牌来启动MVC应用程序中的会话。这是一半的流程:

  1. 用户访问MVC应用
  2. 用户提供密码和用户名
  3. MVC调用API并发送用户名和密码
  4. API将令牌返回给MVC app
  5. 在第4步之后,我该怎么做才能在MVC中启动会话。

    情景信息:

    我们希望利用Azure Active Directory将所有用户信息保留在那里,但我们希望用户能够使用任何电子邮件进行注册,而不仅仅是我们的域名。我们计划使用其电子邮件和域名的组合为AAD中的每个用户创建帐户(因为在AAD中创建的帐户必须属于域)。因此,如果用户的电子邮件是 john@gmail.com ,AAD将存储 johnatgmailcom@ourdomain.onmicrosoft.com

    为什么?

    • 我们无法强制用户使用我们的域创建帐户。
    • 我们不希望用户看到AAD登录屏幕
    • 我们不希望在我们的数据库中存储任何类型的用户帐户信息
    • 我们计划将来在iOS / Android应用程序中利用AAD,因此在MVC应用程序之外进行身份验证可以实现此目的

    这是我们的API中的POC代码,用于验证来自MVC应用程序的用户登录请求:

    AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/cccccccc-cccc-cccc-cccc-ccccccccccccc/oauth2/token");
    try
    {
        UserCredential uc = new UserCredential(userCredendtials.Username, userCredendtials.Password);
        AuthenticationResult azureADToken = context.AcquireToken("https://graph.windows.net@" + "ourdomain.onmicrosoft.com", clientID, uc);
        return Ok(azureADToken);
    }
    catch
    {
        // We didn't authenticate user, send not found - generic error, we can change this
        return NotFound();
    }
    

    然后我们检查在MVC应用程序中API调用的结果是否相应地做出响应。 1,000,000美元的问题是我们如何启动和管理MVC会话,好像我们使用令牌使用ASP.Net Identity这样的东西???

    我们可以根据需要修改API和MVC应用程序,但我们确实允许用户使用任何电子邮件创建帐户并将其信息存储在AAD上。如果这完全是在错误的道路上,任何建议都表示赞赏!

1 个答案:

答案 0 :(得分:3)

不支持您描述的方案,不建议使用Azure AD。如果您想要白标签体验,使用可以选择任意用户名,并且您可以完全自定义信用收集页面,请考虑Azure AD B2C:http://blogs.technet.com/b/ad/archive/2015/09/16/azure-ad-b2c-and-b2b-are-now-in-public-preview.aspx