Azure AD B2C с WebApi2 - вызывает GraphAPI после аутентификации - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение WebApi2, которое использует серверы как интерфейс API для моего интерфейса приложения.Теперь я хочу использовать AD B2C для управления моими пользователями - скажем, я хочу дифференцировать их по ролям (администратор или клиент), и для этого я создал две группы пользователей b2c соответственно.Когда пользователь входит в систему, я хочу отображать разные вещи для пользователей с разными ролями (группами).

Я использую этот пример для настройки Startup.Auth.cs в моем проекте WebApi2:

var tvps = new TokenValidationParameters
{
    ValidAudience = clientId,
    AuthenticationType = signUpSignInPolicy,
};

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(String.Format(aadInstance, tenant, defaultPolicy))),
});

Из того, что я прочитал, b2c не возвращает групповые сообщения пользователяпретензии на данный момент.Некоторые люди предложили мне вызвать GraphApi после получения токена, чтобы получить эти группы и добавить их в заявки пользователей:

private static async Task<string> GetGroups(string token, string userId)
{
    using (var client = new HttpClient())
    {
        var requestUrl = $"https://graph.microsoft.com/v1.0/users/{userId}/memberOf?$select=displayName";
        var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
        var response = await client.SendAsync(request);
        var responseString = await response.Content.ReadAsStringAsync();

        return responseString;
    }
}

Вот где я застрял.Как я могу ввести свой код, чтобы получить токен для вызова графа?Я перепутал с OAuthBearerAuthenticationOptions.Provider:

Provider = new OAuthBearerAuthenticationProvider
{
    OnValidateIdentity = (context) =>
    {
        // var token = ??
        // var userId = <get from context's claims>
        // var groups = GetGroups(token, userId);
        // <add to claims>

        return Task.CompletedTask;
    }
},

... но я не знаю, как получить токен.Может быть, это неправильно с самого начала, и мне нужен другой подход?

1 Ответ

0 голосов
/ 01 декабря 2018

Токен клиента не может быть использован для вызова AADGraph / MSGraph Apis.Чтобы токен автоматически вызывал Graph API, нам нужен доступ только для приложений.Нам необходимо сконфигурировать приложение в клиенте, чье ядро ​​используется для получения токена.Затем этот токен можно использовать для вызова API-интерфейса memberOF (или любого другого API-интерфейса, который требует или требует наличия информации о пользователе)

Вот пример и объяснение того, как вызывать API AAD Graph в зависимой службе B2C.https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...