Как настроить пользовательские утверждения для токена aad, используя код C# - PullRequest
0 голосов
/ 06 марта 2020

У меня есть webapi, который генерирует токен aad, и я написал логи для генерации токенов c в Get() методе в webapi.

Я могу генерировать токен aad jwt из webapi get() метод, но теперь я хочу включить некоторые пользовательские утверждения в токен.

Как настроить пользовательские утверждения для токена aad, используя c#.

Я использовал приведенный ниже код для генерации токена aad.

var authenticationContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("https://login.windows.net/" + ConfigurationManager.AppSettings["TenantID"].ToString());
            var credential = new ClientCredential(clientId: ConfigurationManager.AppSettings["ClientID"].ToString(), clientSecret: secret);
            var result = await authenticationContext.AcquireTokenAsync(
                ConfigurationManager.AppSettings["Resource"].ToString(),
                credential
                ).ConfigureAwait(false);

Пожалуйста, поделитесь любым примером c# код для установки пользовательских утверждений в токен aad, сгенерированный из приведенного выше кода.

Примечание: Я хочу установить новый настраиваемый запрос для токена aad, в котором значение настраиваемого утверждения получено из внешней логики c.

Обновление 1:

Похоже, что приведенный ниже пост может быть полезным.

https://www.rahulpnath.com/blog/azure-ad-custom-attributes-and-optional-claims-from-an-asp-dot-net-application/

Я попробовал ниже следующий пост.

Сгенерировал токен jwt для вызова Graph API. Но я заблокирован по приведенному ниже коду.

    var dictionary = new Dictionary<string, object>();
        dictionary.Add(employeeCodePropertyName, employee.Code);

//Here I can't use graphApiClient.Users because, I don't have any user info on my jwt token. It will be just Access token which as details related to aad application.I want to update extension attribute which is present in OptionalClaims -> Access Token of AAD Application Manifest.
        await graphApiClient.Users[employee.EmailAddress]  
            .Request()
            .UpdateAsync(new User()
            {
                AdditionalData = dictionary
            });

Как обновить атрибут заявки на расширение, присутствующий в маркере доступа дополнительных заявок. Я хочу обновить код c#. Как это сделать. Пожалуйста, предложите.

Обновление 2:

Я хочу использовать код, аналогичный приведенному ниже, для обновления пользовательского атрибута утверждения расширения, присутствующего в необязательных утверждениях azure рекламного приложения, но UpdateAsync не работает.

await graphApiClient.Application[clientid]  
            .Request()
            .UpdateAsync(new Application()
            {
                AdditionalData = dictionary
            });

При UpdateAsync() я получаю проблему, как показано ниже

Specified HTTP method is not allowed for the request

Пожалуйста, дайте мне знать решение для добавления пользовательской определенной заявки к azure токен доступа к рекламе.

Примечание: Поскольку я хочу обновить токен доступа, на токене доступа не будет никакой пользовательской информации. Таким образом, graphApiClient.Users[employee.EmailAddress] не будет работать, поскольку токен доступа не будет иметь никакой пользовательской информации, такой как EmailAddress

Я создал атрибут заявки на расширение в azure ad ap manifest, как показано ниже

enter image description here

Я хочу обновить атрибут заявки на расширение extension_clientid_moviename значение динамически со значением, полученным из внешнего источника через код. Как это сделать. Пожалуйста, предложите.

Обновление 3:

Ниже приведен код для обновления атрибута расширенного утверждения, присутствующего в дополнительном маркере идентификатора утверждений.

   await graphApiServiceClient.Users["abcd@hotmail.com"]
                .Request()
                .UpdateAsync(new User()
                {
                    AdditionalData = dictionary
                });

Я получаю ошибку, как показано ниже

Code: Request_ResourceNotFound\r\nMessage: Resource '' does not exist or one of its queried reference-property objects are not present.

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Что касается проблемы в Обновлении 3, мы не можем использовать гостевой пользователь электронная почта здесь. Вместо этого мы должны использовать ObjectId. Вот почему вы получили ошибку Request_ResourceNotFound.

await graphApiServiceClient.Users["ObjectId"]
                .Request()
                .UpdateAsync(new User()
                {
                    AdditionalData = dictionary
                });

enter image description here

0 голосов
/ 09 марта 2020

Это связано с тем, что вы используете поток учетных данных клиента OAuth 2.0 для получения токена доступа:

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

Этот поток обычно используется для передачи с сервера на сервер. взаимодействие с сервером без непосредственного взаимодействия с пользователем. Таким образом, вы не можете найти информацию о пользователе в токене доступа.

В предоставленном вами документе добавлено свойство расширения пользователя, обновите это значение с помощью Microsoft Graph:

await graphApiClient.Users[employee.EmailAddress]
    .Request()
    .UpdateAsync(new User()
    {
        AdditionalData = dictionary
    });

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

Но так как свойство является свойством расширения пользователя, вы можете получить значение из утверждений в маркере идентификатора, когда пользователь входит в систему с Azure AD в вашем клиентском приложении. Это требование не будет включено в токен доступа, выданный с использованием потока учетных данных клиента.

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