无头认证Azure AD b2c

时间:2016-01-28 21:27:05

标签: azure azure-ad-graph-api azure-ad-b2c

我正在寻找一种通过用户名/密码以无头方式为Azure AD b2c验证用户的方法。 Azure AD b2c很棒,但我们认为登录的重定向可能会导致客户之间的混淆(有时甚至被某些浏览器阻止)。此外,我们希望完全控制客户的用户体验。

我研究过ADAL和Graph API,但还没有找到任何东西。

吉娜

6 个答案:

答案 0 :(得分:7)

如上所述here,您可以将Azure AD应用用于Client Credential Flow服务帐户。它不是最佳的,但它有效。

  1. Define an Azure AD App用于Web API
  2. Define an Azure AD App每个服务帐户
  3. 配置Web API以接受来自B2C租户和Azure AD的令牌
  4. 针对Web API的服务帐户AD应用程序请求访问令牌
  5. 注意:请务必在B2C租户下创建Azure AD应用。

    代码段从C#获取访问令牌

    using (var httpClient = new HttpClient())
    {
        httpClient.BaseAddress = new Uri("https://login.microsoftonline.com");
    
        var content = new FormUrlEncodedContent(new[]
        {
              new KeyValuePair<string, string>("grant_type", "client_credentials")
            , new KeyValuePair<string, string>("client_id", "[service account app id e.g. 10d635e5-7615-472f-8200-a81d5c87c0ca")
            , new KeyValuePair<string, string>("client_secret", "[client secret defined in the service account e.g. 5L2ZJOBK8GI1wRSgGFooHcBkAOUOj65lQd9DgJxQOrw=]")
            , new KeyValuePair<string, string>("scope", "[App ID URI of the web api azure ad app]/.default e.g. https://my-b2c-tenant.onmicrosoft.com/my-azure-ad-ap/.default")
        });
    
        var requestResult = await httpClient.PostAsync("/[your b2c tenant].onmicrosoft.com/oauth2/v2.0/token", content);
        var contentResult = await requestResult.Content.ReadAsStringAsync();
    
        var json = JObject.Parse(contentResult);
        var accessToken = (string)json["access_token"];
    }
    

    App ID URI

    app id uri screenshot

    您可能希望定义一些自定义声明来保护Web API。请参阅'Application Permissions' here

    1. 修改Web API Azure AD应用程序上的应用程序清单

      {
          "appRoles": [{
                  "allowedMemberTypes": [
                      "Application"
                  ],
                  "displayName": "Some display nane",
                  "id": "[create a new guid]",
                  "isEnabled": true,
                  "description": "Allow the application to _____ as itself.",
                  "value": "the-blah-role"
              }
          ]
      }
      
    2. 授予服务帐户Azure AD App对已定义的自定义应用程序权限的权限

    3. 授予服务帐户的权限将返回roles声明:

      {
        "roles": [
          "the-blah-role"
        ]
      }
      

      请upvote the user voice feedback item以便更轻松:)

答案 1 :(得分:6)

目前无法在没有交互式用户的情况下运行Azure B2C。虽然我确信它会在某个时刻到达,但目前您无法创建基于B2C的后端应用程序。

根据Azure Active Directory B2C preview: Limitations & Restrictions

  

守护进程/服务器端应用程序

     

包含长时间运行的进程或在没有用户的情况下运行的应用程序也需要一种方法来访问安全资源,例如Web API。这些应用程序可以使用OAuth 2.0客户端凭据流使用应用程序的标识(而不是使用者的委派身份)进行身份验证和获取令牌。此流程尚未在Azure AD B2C预览中提供 - ,即应用程序只能在发生交互式消费者登录流后获取令牌。

答案 2 :(得分:0)

如果您想要的是无头身份验证,为什么不单独使用Azure AD?它有一个API。如果您打算自己创建和管理所有UI,为什么还要或需要AD B2C?

答案 3 :(得分:0)

Azure AD B2C无法提供无头身份验证,但可以进行组合 自定义旅程
虚荣域 和自定义样式 用户可以永远不会离开您的网站

答案 4 :(得分:0)

您正在寻找的是天蓝色AD b2c中 OWIN的资源所有者密码凭据。您可以参考https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/13817784-add-support-for-resource-owner-password-credential upvote 来实施此功能

答案 5 :(得分:0)

仍处于预览状态(截至2018年1月),但如果您正在使用Azure功能,则可能是您正在寻找的内容。看看Microsoft Graph bindings for Azure Functions