Я играю с сценариями аутентификации и авторизации в Azure AD, и не все понятно для меня.
В настоящее время я смотрю SinglePageApp-WebAPI-AngularJS-DotNet
образец проекта.Подтвердить токен доступа для WEB API, защищенный Azure AD
И одна вещь, которую я не могу понять. На стороне клиента мы получаем токен доступа, используя неявный поток грантов - это понятно. Затем мы отправляем запрос в WEB API с Bearer
и используем токен в качестве значения. На стороне сервера у нас есть TodoListController
с атрибутом Authorize
. Таким образом, чтобы попасть в запрос контроллера, необходимо авторизоваться.
Что неясно, как проверка подлинности проверит мой токен доступа (что, если случайный текст отправлен вместо действительного токена доступа?). Я клонировал проект katana и исследовал классы WindowsAzureActiveDirectoryBearerAuthenticationExtensions
и OAuthBearerAuthenticationHandler
, но я до сих пор не могу найти конкретное место, где происходит валидация.
Как мой WEB API будет знать, что этот конкретный токен доступа действителен и где эта конкретная строка кода, которая отвечает за проверку?
Спасибо!
UPD:
На самом деле я нахожу место. Все работы выполняются в OAuthBearerAuthenticationHandler
в методе AuthenticateCoreAsync
:
tokenReceiveContext.DeserializeTicket(tokenReceiveContext.Token);
этот вызов приводит к управлению JwtFormat.Unprotect
метода, который выполняет фактическую проверку.
Спасибо @Aram за хорошие заметки.
«Owin промежуточного слоя будет проверять против аудитории и Арендатором, что токен был получен, и если они не совпадают с Authz, это провалится »- я знаю это, но как это делается? Не могли бы вы указать мне на конкретную строку кода, где это происходит? – Kai
@Kai Обновлен ответ для этого ... – Aram
спасибо за обновление. Он работает для OpenidConnect, но как он работает для токена маркера OAuth? Посмотрите на класс 'OAuthBearerAuthenticationHandler', существует строка' await Options.Provider.ValidateIdentity (context); 'где должна выполняться проверка. 'OAuthBearerAuthenticationProvider' - это реализация для' Options.Provider'. Посмотрите на метод 'ValidateIdentity' - он вызывает делегат OnValidateIdentity', который устанавливается в конструкторе -' context => Task.FromResult