Как: группы пользователей ADB2C в токене

Я использую клиент ADB2C и хотел бы знать, как настраивать и извлекать группы пользователей в токене аутентификации в потоке аутентификации ADB2C.

Я могу настроить и получить настраиваемый атрибут в моем токене, но я не могу настроить утверждение групп, которое потенциально может указывать членство пользователя в определенной группе (группах).

ожидается группа: {}


person Aniket Shintre    schedule 08.04.2019    source источник
comment
Решает ли проблему изменение записи в манифесте и настройки groupMembershipClaims = SecurityGroup?   -  person Aniket Shintre    schedule 08.04.2019
comment
В B2C манифест для приложений отсутствует.   -  person SunnySun    schedule 09.04.2019


Ответы (1)


В B2C нет группового утверждения, которое будет возвращено в токене, поэтому вы не можете следовать тем же путем в Azure AD.

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

Для этого вы можете обратиться к методу в Azure AD:

var authority = $"https://login.microsoftonline.com/{Tenant}";
var graphCca = new ConfidentialClientApplication(GraphClientId, authority, GraphRedirectUri, new ClientCredential(GraphClientSecret), userTokenCache, null);
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

try
{
    AuthenticationResult authenticationResult = await graphCca.AcquireTokenForClientAsync(scopes);
    string token = authenticationResult.AccessToken;

    using (var client = new HttpClient())
    {
        string requestUrl = $"https://graph.microsoft.com/v1.0/users/{signedInUserID}/memberOf?$select=displayName";

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);

        HttpResponseMessage response = await client.SendAsync(request);
        var responseString = await response.Content.ReadAsStringAsync();

        var json = JObject.Parse(responseString);

        foreach (var group in json["value"])
            notification.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Role, group["displayName"].ToString(), System.Security.Claims.ClaimValueTypes.String, "Graph"));

        //TODO: Handle paging. 
        // https://developer.microsoft.com/en-us/graph/docs/concepts/paging
        // If the user is a member of more than 100 groups, 
        // you'll need to retrieve the next page of results.
    }
} catch (Exception ex)
{
    //TODO: Handle
    throw;
}

person SunnySun    schedule 09.04.2019