我正在寻找一种以无头模式使用用户名/密码对Azure AD b2c进行身份验证的方法。Azure AD b2c非常好,但我们觉得登录重定向可能会导致客户混淆(有时甚至被某些浏览器阻止)。此外,我们希望完全控制客户的UX体验。
我已经研究了ADAL和Graph API,但还没有找到合适的内容。
Gina
我正在寻找一种以无头模式使用用户名/密码对Azure AD b2c进行身份验证的方法。Azure AD b2c非常好,但我们觉得登录重定向可能会导致客户混淆(有时甚至被某些浏览器阻止)。此外,我们希望完全控制客户的UX体验。
我已经研究了ADAL和Graph API,但还没有找到合适的内容。
Gina
注意:务必在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"];
}
应用程序标识 URI
你可能需要定义一些自定义声明来保护 Web API。请参见此处的“应用程序权限”。
修改 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"
}
]
}
授予服务账户Azure AD应用程序权限以定义的自定义应用程序权限
授予服务账户的权限将在roles
声明中返回:
{
"roles": [
"the-blah-role"
]
}
请点赞用户反馈,以使其更容易实现。目前无法在没有交互式用户的情况下运行Azure B2C。虽然我相信它最终会到来,但目前,您不能基于B2C创建后端应用程序。
根据 Azure Active Directory B2C预览:限制和限制
守护程序/服务器端应用
包含长时间运行进程或在没有用户存在的情况下运行的应用程序还需要一种访问受保护资源(例如Web API)的方式。这些应用程序可以使用OAuth 2.0客户端凭据流通过应用程序标识进行身份验证并获取令牌(而不是使用消费者的委派标识)。在Azure AD B2C预览版中尚未提供此流 - 也就是说,应用程序只能在交互式消费者登录流之后获取令牌。
虽然仍处于预览阶段(截至2018年1月),但如果您正在使用Azure Functions,这可能是您正在寻找的东西。请查看Azure Functions的Microsoft Graph绑定。