Допустим, у меня есть база данных с двумя таблицами, Users и AccessTokens. Каждый пользователь имеет доступ к AccessToken. Этот токен доступа является просто случайной строкой, он не имеет никаких претензий или чего-либо еще, он также может быть "ab c".
Я уже использую. NET аутентификация JWT по умолчанию для аутентификации пользователей по Azure AD с тегом [Authorize]
. У меня также есть одна настраиваемая политика, которая проверяет, находится ли пользователь в группе администраторов в Azure AD с тегом [AuthorizeAdmin]
.
Теперь я пытаюсь создать настраиваемую политику, которая проверяет что пользователь, пытающийся получить доступ к конечной точке, имеет AccessToken в базе данных, и что идентификатор пользователя в этом AccessToken совпадает с идентификатором пользователя, пытающегося войти в систему, например, с помощью тега [AuthorizeToken]
. Однако этот тег [AuthorizeToken]
должен сначала попытаться проверить пользователя, используя текущую реализованную аутентификацию с JWT и Azure AD, и все это, и если это не удастся, он должен проверить «токен» (строку) в заголовке авторизации. Поэтому мне нужна политика, которая берет пользователя из контекста http и заголовка авторизации в качестве аргументов, а также обращается к моей базе данных.
Ответы, которые я нашел до сих пор (такие как: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1) не имеют объяснения того, как реализовать базы данных в пользовательских политиках или как связать цепочки аутентификаций, чтобы в случае неудачи перейти к следующей.
Любая помощь здесь приветствуется, поскольку я чувствую себя застрявшим.