Как получить Azure access_token из Azure Функционального приложения с id_token? - PullRequest
0 голосов
/ 16 марта 2020

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

Я следовал этому учебнику , чтобы использовать B2 C авторизация клиента приложения функций.

Я могу получить id_token с этим в приложении функций. Чтобы получить токен, я вставляю в браузер адрес приложения Function:

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
        {
            string code = null;
            foreach (var h in req.Headers)
            {
                if(h.Key.Equals("X-MS-TOKEN-AAD-ID-TOKEN"))
                    code += (h.Value);//authorisation id_token to get access_token
            }

Я пробовал несколько уроков, чтобы получить токен доступа / refre sh, и этот один Я мог бы подписаться / понимаю: я вижу в Fiddler я получаю id_token в https://tenantName.azurewebsites.net/.auth/login/aad/callback; но следующая строка https://functionAppName.azurewebsites.net/api/functionName запрос GET, ответ: Ошибка сервера, 404 - Файл или каталог не найден. ":

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
        {
            string code = null;
            foreach (var h in req.Headers)
            {
                if(h.Key.Equals("X-MS-TOKEN-AAD-ID-TOKEN"))
                    code += (h.Value);
            }
var content = new StringContent(
                "grant_type=refresh_token" +
                "&client_id=" + B2CApplication-ApiID+
                "&redirect_uri="+"https://functionapp.azurewebsites.net/.auth/login/aad/callback"+
                "&client_secret="+"XXX"+
                "&code" + code +
                "&scope=user.read"+
                "&resource="+"https://graph.microsoft.com",//also tried https://graph.microsoft.com/.default
                Encoding.UTF8,
                "application/x-www-form-urlencoded");

    BaseURL="https://tenantName.b2clogin.com/tenantName.onmicrosoft.com/oauth2/v2.0/token";
    var response = await httpClient.PostAsync(BaseURL, content);
    var result = await response.Content.ReadAsStringAsync();

    dynamic json = JsonConvert.DeserializeObject(result);
    var access_token = json.access_token;
    var refresh_token = json.refresh_token;
    string token_value = access_token.value; 
    string refresh_value = refresh_token.value;
    return (ActionResult)new OkObjectResult($"Complete " ,{token_value});

Это настройка:

    Azure AD B2C Tenant
    Domain Name: tenantName.onmicrosoft.com
    Applications: B2CApplication-Api
        WebApp/API : Yes
        Allow Implicit Flow : Yes
        Reply Url : https://functionapp.azurewebsites.net/.auth/login/aad/callback
        App ID : https://tenantName.onmicrosoft.com/B2CApplication-Api
        Add URI (optional): identityauth
        Include Native client: No
        Secret key: XXX
        Reply URL: https://tenantName.azurewebsites.net/.auth/login/aad/callback
        API Access to Microsoft Graph: Read User Profile with granted admin consent
        Published Scope read: https://tenantName.onmicrosoft.com/identityauth/read
        Published Scope user_impersonation: https://tenantName.onmicrosoft.com/identityauth/user_impersonation
    User Flows
        SignupSignIn, Password reset, profile editing
        Application : B2CApplication-Api
        Reply Url : https://tenantName.azurewebsites.net/.auth/login/aad/callback


    Azure Function: Anonymous
    App Service Authentication : On
    Action to take when not authenticated : Login with Azure AD
    Authentication provider:Azure AAD
        Management Mode : Advanced
        client id : B2C-Application-ApplicationID
        issuer url : https://tenantName.b2clogin.com/tenantName.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_signinsignoutpolicy
        Allowed Token Audiences: B2C-Application-Application_ID

1 Ответ

1 голос
/ 19 марта 2020

Azure AD B2 C токены доступа могут использоваться только для доступа к вашим собственным защищенным ресурсам.

Мы не можем использовать выданный Azure AD B2 C доступ токен для вызова Microsoft Graph API. Пользователь должен вызвать ваш API, а вашему API нужно использовать client_credentials для получения токена для Graph API.

И, https://graph.microsoft.com для ресурса (v1.0) и https://graph.microsoft.com/.default для области действия (версия 2.0). Подробнее см. в этой статье .

Ссылка:

B2 C вызов веб-API, которым вы владеете

AAD вызывает MS Graph API

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