Azure OAuth для исправления проблем приложений - PullRequest
0 голосов
/ 03 мая 2018

У меня есть базовое приложение-функция, которое принимает GET и возвращает статический текст. В конце концов я хотел бы написать тело POST в очередь, но для простоты функция просто возвращает текст. Если я отключу авторизацию, я могу загрузить URL и получить ответ в своем браузере или почтальоне. Если я активирую aad auth в приложении-функции и создаю простую регистрацию приложения, затем перехожу на сайт в моем браузере, мне предлагается авторизация и я могу войти в систему в интерактивном режиме; пока никаких забот

Я хотел бы получить доступ к функции с использованием секретного ключа для использования приложения без интерактивного входа в систему, поэтому в рамках приложения я перехожу к Keys и генерирую его. Это где мои проблемы начинаются. Если я использую почтальон и настраиваю oauth, используя свой идентификатор приложения и ключ, я могу получить токен, я также проверил это, выполнив POST для https://login.microsoftonline.com//oauth2/token напрямую и отметив ответ токена носителя. Однако, когда я пытаюсь получить доступ к своему функциональному приложению с помощью токена на предъявителя (либо вручную добавляя заголовок авторизации, либо позволяя почтальону добавить его из формы oauth 2.0), мне всегда отказывают с 401, заявляющим: «У вас нет разрешения на просмотр этого каталога. или страницу. когда я делаю GET для моего приложения функции. Может ли кто-нибудь указать мне правильное направление? Заранее спасибо.

Пример ответа от логина url

{
    "token_type": "Bearer",
    "expires_in": "3599",
    "ext_expires_in": "0",
    "expires_on": "1525312644",
    "not_before": "1525308744",
    "resource": "https://<siteaddress>.azurewebsites.net/",
    "access_token": "eyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..etc..."
}

Ответ от приложения get против функции с токеном

GET /api/t2 HTTP/1.1
> Host: <sitename>.azurewebsites.net
> Authorization: Bearer eyxxxxxxxxxxxxxxxxxxxxxxxxxxxx.....etc....
> Accept: */*
< HTTP/1.1 401 Unauthorized
< Content-Length: 58
< Content-Type: text/html
< WWW-Authenticate: Bearer realm="<sitename>.azurewebsites.net" authorization_uri="https://login.windows.net/<tenantid>/oauth2/authorize" resource_id="<app reg id>"
< X-Powered-By: ASP.NET
< Date: Thu, 03 May 2018 01:12:43 GMT

1 Ответ

0 голосов
/ 03 мая 2018

Я полагаю, что вы смешиваете интеграцию Azure AD с функциональными клавишами (авторизация ключей API) .

Последний является автономным механизмом авторизации и работает путем добавления

?code=<func-key-from-portal>

на URL функции или передав

x-functions-key: <func-key-from-portal>

заголовок с каждым запросом к функции. При использовании функциональных клавиш функция OAuth не используется.

Пример:

GET /api/get-issues HTTP/1.1
Host: {funcapp}.azurewebsites.net
User-Agent: ajax-library-of-the-day
x-functions-key: rkW0PqT.....zcUBQ==

или

GET /api/get-issues?code=rkW0PqT.....zcUBQ== HTTP/1.1
Host: {funcapp}.azurewebsites.net
User-Agent: ajax-library-of-the-day

Function authorization logic

...