Для реализации требования (1), мне нужно будет реализовать пользовательскую функцию авторизации, которая проверяет секрет приложения, или если в openiddict включен другой поток, который заботится о том, чтобы только авторизованным приложениям был разрешен доступ к API(независимо от атрибутов авторизации)?
Начиная с RC3, идентификация клиента была сделана обязательной по умолчанию: если вы не отправите client_id
, соответствующий записи в таблице приложений, ваш запрос будетбыть отвергнутым самим OpenIddict.В предыдущих версиях вы могли выбрать эту функцию, позвонив options.RequireClientIdentification()
(теперь она отключена).
Для реализации требования (2) для внешних поставщиков удостоверений можно ли настроить несколько секретовдля каждого приложения, зарегистрированного в openiddict, чтобы позволить своим пользователям использовать Facebook или Twitter для аутентификации?Это важно, потому что API должен был бы вызвать AddFacebook () во время конфигурации для каждого приложения, которое может получить доступ к API (не clientID и секрет самого API).Поскольку несколько приложений имеют свои собственные facebookID и секрет, я бы предположил, что это будет работать, только если openiddict может разрешить регистрацию нескольких идентификаторов и секретов для одного и того же типа провайдера, например, через AddFacebook ().
Нет прямой связи между OpenIddict и схемами аутентификации, которые вы используете, поэтому нет, вы не можете настроить несколько учетных данных Facebook "через" OpenIddict, так как они не связаны между собой.
Предполагая, что вам это нужно для целей мультитенантности, вы можетехотите прочитать https://stackoverflow.com/a/49682427/542757, чтобы узнать, как можно переопределить монитор параметров по умолчанию в ASP.NET Core, чтобы можно было предоставлять специфичные для арендатора параметры для обработчиков аутентификации, таких как OpenIddict, Facebook, Google и все остальное.
Для реализации требования (3) существует ли встроенный способ получения идентификатора приложения вызывающего приложения из openiddict, как если бы пользователь был аутентифицирован?
Предполагая, что оно известно (то есть выне сделал явно клиентидентификация необязательна в опциях OpenIddict), да.Например, из контроллера MVC:
var result = await HttpContext.AuthenticateAsync(OpenIddictValidationDefaults.AuthenticationScheme);
Debug.Assert(result.Ticket != null, "The authentication ticket shouldn't be null.");
// The presenters list contains the authorized parties allowed to
// use the access token with your APIs. Usually, it contains a single value.
// Note: this extension requires a using for AspNet.Security.OpenIdConnect.Extensions.
var client = result.Ticket.GetPresenters().FirstOrDefault();