Ответ 1
Как упоминалось здесь, вы можете использовать приложения Azure AD для потока учетных данных клиента для учетных записей служб. Это не оптимально, но работает.
- Определите приложение Azure AD для веб-API
- Определите приложение Azure AD для каждой учетной записи службы
- Настройте веб-API для приема токенов от клиента B2C и Azure AD.
- Предполагая, что у вас уже настроен веб-API для B2C...
- Известный URL-адрес конфигурации приложения Azure AD: https://login.microsoftonline.com/[your-b2c-tenant].onmicrosoft.com/.well-known/openid-configuration
- Дополнительная информация: Основные документы ASP.NET: Используйте несколько схем аутентификации
- .Запрос токена доступа к приложению AD учетной записи службы для веб-API
Примечание. Обязательно создайте приложения Azure AD под своим клиентом B2C.
Фрагмент кода для получения токена доступа из С#
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
Возможно, вы захотите определить некоторые пользовательские утверждения для защиты веб-API. См. "Разрешения приложений" здесь.
Измените манифест приложения в приложении Azure AD Web API
{ "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"
]
}
Чтобы сделать это проще, добавьте голосового отзыва пользователя 😀