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

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

吉娜

最佳答案

here所述,您可以将Azure AD Apps用于Client Credential Flow服务帐户。这不是最佳方法,但可以。


Define an Azure AD App用于Web API
每个服务帐户Define an Azure AD App
配置Web API以接受来自B2C租户和Azure AD的令牌


假设您已经为B2C配置了Web API ...
Azure AD应用程序的知名配置URL为https://login.microsoftonline.com/[your-b2c-tenant].onmicrosoft.com/.well-known/openid-configuration
进一步阅读:ASP.NET Core文档:Use multiple authentication schemes

针对Web API向服务帐户AD App请求访问令牌


注意:确保在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

azure -  headless 身份验证Azure AD b2c-LMLPHP



您可能需要定义一些自定义声明来保护Web API。请参见'Application Permissions' here


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

{
    "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"
        }
    ]
}

授予服务帐户Azure AD App权限到定义的自定义应用程序权限


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

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




请投票the user voice feedback item以使此操作更容易😀

关于azure - headless 身份验证Azure AD b2c,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35072371/

10-15 07:47