Получить токен для Azure ADv2 Rest Api Protected - PullRequest
0 голосов
/ 20 июня 2019

Я создаю WebApi с использованием Visual Studio и мастера для защищенного API.

В результате появилось новое приложение на портале Azure и файл конфигурации jsonconfig (я использую netcore 2.2)

Веб-интерфейс очень прост, часть кода:

[Authorize]
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

Теперь я пытаюсь получить токен для вызова API, используя следующий код

var msalConfig = {
        auth: {
            clientId: '83a8a6ee-afd5-41d3-92bd-2a6352cff7da', //This is your client ID
            authority: "https://login.microsoftonline.com/d7124a8f-3301-4c72-9231-4bb39d8b95a3" //This is your tenant info
        },
        cache: {
            cacheLocation: "localStorage",
            storeAuthStateInCookie: true
        }
    };

и вызывающий

var requestObj2 = {

        scopes:["https://xxxxxx.com/Test2019/user_impersonation"]
    };



      var myMSALObj = new Msal.UserAgentApplication(msalConfig);

function signIn() {
        myMSALObj.loginPopup(requestObj).then(function (loginResponse) {
            //Successful login
            showWelcomeMessage();
            //Call MS Graph using the token in the response
            acquireTokenPopupAndCallMSGraph();
        }).catch(function (error) {
            //Please check the console for errors
            console.log(error);
        });
    }

и в конце

function acquireTokenPopupAndCallMSGraph() {
        //Always start with acquireTokenSilent to obtain a token in the signed in user from cache
        myMSALObj.acquireTokenSilent(requestObj2).then(function (tokenResponse) {
            console.log(tokenResponse.accessToken);
            alert('autenticado');
            callMSGraph(graphConfig.graphMeEndpoint, tokenResponse.accessToken, graphAPICallback);
        }).catch(function (error) {
            console.log(error);
            // Upon acquireTokenSilent failure (due to consent or interaction or login required ONLY)
            // Call acquireTokenPopup(popup window) 
            if (requiresInteraction(error.errorCode)) {
                myMSALObj.acquireTokenPopup(requestObj).then(function (tokenResponse) {
                    callMSGraph(graphConfig.graphMeEndpoint, tokenResponse.accessToken, graphAPICallback);
                }).catch(function (error) {
                    console.log(error);
                });
            }
        });
    }

Все работает, кроме токена, сгенерированного при использовании в почтальоне в заголовке авторизации = "токен на предъявителя"

Не работает.

Пожалуйста, любые советы о том, как получить токен ..: (

Спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

Способ получения токена доступа верен.Замените значение областей на scopes:["83a8a6ee-afd5-41d3-92bd-2a6352cff7da/.default"] и повторите попытку.

Если это по-прежнему не работает, вставьте сюда сообщение об ошибке.

Вот полный пример относительно вызова веб-API бэкэнда с использованием токена доступа.

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