Как получить пользовательские свойства из Azure AD - PullRequest
0 голосов
/ 27 декабря 2018

Я прошел этот учебник, предоставленный Microsoft, чтобы интегрировать Azure Ad для аутентификации в моем веб-приложении.https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v1-dotnet-webapi

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

Однако у меня есть доступ только к основной информации о пользователе, такой как GivenName и SurName.Я создал расширенные свойства на портале Azure, названные как extension_e3f9d0 ...

Проблема в том, что я понятия не имею, как получить доступ к атрибутам после входа в систему пользователя. Я могу получить эти пользовательские атрибутыкогда я вызываю API в Postman следующим образом:

https://graph.microsoft.com/v1.0/users/[user@whatever]?$select=extension_e3f9d0...

Я пытаюсь сделать этот вызов в C #, но я не знаю, как получить accessToken, как только пользователь вошел в систему, который требуется в заголовке запроса

async static void GetRequest(string url)
    {
        Summary summary = new Summary();
        using(HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", How do I get the user's accesstoken here?);
            using (HttpResponseMessage response = await client.GetAsync("https://graph.microsoft.com/v1.0/users/[user@whatever]?$select=extension_e3f9d0"))
            {
                using(HttpContent content = response.Content)
                {
                    string myContent = await content.ReadAsStringAsync();
                    System.Diagnostics.Debug.WriteLine("CONTENT " + myContent);
                }
            }
        }
    }

Код для входа в систему пользователя

// The Client ID (a.k.a. Application ID) is used by the application to uniquely identify itself to Azure AD
string clientId = System.Configuration.ConfigurationManager.AppSettings["ClientId"];

// RedirectUri is the URL where the user will be redirected to after they sign in
string redirectUrl = System.Configuration.ConfigurationManager.AppSettings["redirectUrl"];

// Tenant is the tenant ID (e.g. contoso.onmicrosoft.com, or 'common' for multi-tenant)
static string tenant = System.Configuration.ConfigurationManager.AppSettings["Tenant"];

// Authority is the URL for authority, composed by Azure Active Directory endpoint and the tenant name (e.g. https://login.microsoftonline.com/contoso.onmicrosoft.com)
string authority = String.Format(System.Globalization.CultureInfo.InvariantCulture, System.Configuration.ConfigurationManager.AppSettings["Authority"], tenant);

/// <summary>
/// Configure OWIN to use OpenIdConnect 
/// </summary>
/// <param name="app"></param>
public void Configuration(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            // Sets the ClientId, authority, RedirectUri as obtained from web.config
            ClientId = clientId,
            Authority = authority,
            RedirectUri = redirectUrl,

            // PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it is using the home page
            PostLogoutRedirectUri = redirectUrl,

            //Scope is the requested scope: OpenIdConnectScopes.OpenIdProfileis equivalent to the string 'openid profile': in the consent screen, this will result in 'Sign you in and read your profile'
            Scope = OpenIdConnectScope.OpenIdProfile,

            // ResponseType is set to request the id_token - which contains basic information about the signed-in user
            ResponseType = OpenIdConnectResponseType.IdToken,

            // ValidateIssuer set to false to allow work accounts from any organization to sign in to your application
            // To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name or Id (example: contoso.onmicrosoft.com)
            // To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
            TokenValidationParameters = new TokenValidationParameters()
            {
                ValidateIssuer = false
            },

            // OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to OnAuthenticationFailed method
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = OnAuthenticationFailed
            }
        }
    );
}

1 Ответ

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

Чтобы использовать Microsoft Graph для чтения и записи ресурсов от имени пользователя, ваше приложение должно получить токен доступа из Azure AD и прикрепить токен к запросам, отправляемым в Microsoft Graph.

Основные действияЧтобы получить токен доступа из конечной точки Azure AD v2.0, необходимо использовать поток предоставления кода авторизации OAuth 2.0:

1. Зарегистрируйте приложение в Azure AD.

2. Получите авторизацию.

Для конечной точки Azure AD v2.0 разрешения запрашиваются с помощью параметра scope.В этом примере запрошенные разрешения Microsoft Graph относятся к User.Read и Mail.Read, что позволит приложению читать профиль и почту зарегистрированного пользователя.

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=user.read%20mail.read

3. Получите токен доступа.

Ваше приложение использует код авторизации, полученный на предыдущем шаге, чтобы запросить токен доступа, отправив запрос POST конечной точке / token.

4.Возвоните в Microsoft Graph с токеном доступа.

Для вошедшего в систему пользователя я использую https://graph.microsoft.com/v1.0/me?$select=surname

enter image description here

Для получения более подробной информации вы можете обратиться к этому article .

Также вы можете позвонить, чтобы указать URI ресурса с кодом авторизации как ниже .

var authContext = new AuthenticationContext(authorityString);
var result = await authContext.AcquireTokenByAuthorizationCodeAsync
(
    authorizationCode,
    redirectUri, // eg http://localhost:56950/
    clientCredential, // Application ID, application secret
    "https://graph.microsoft.com/"
);
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...