Я просто заканчиваю авторизацию и сервер ресурсов для OAuth2, используя DotNetOpenAuth 4.3.4. Для тестирования я создал тестовый клиент, выполнив OAuth2Client.DotNetOpenAuth - Как клиент аутентифицирует идентификатор и секрет?
Поскольку я использую DNOA для всех сеансов связи и запроса, я не уверен, полностью ли я понимаю, что происходит под капотом. Но это знание очень важно, когда я делаю документацию.
Итак, не могли бы вы объяснить мне, как работает аутентификация клиента в DNOA? Я использую код авторизации как grant_type, и когда я использую свой тестовый клиент для обмена кодом для access_token, DNOA каким-то образом проверяет client_secret и client_id. Я загрузил исходный код для DNOA, но это не помогло.
Когда я установил точку останова на контроллер Oauth2 (метод токена) и проанализировал запрос как HttpRequestMessage, я вижу, что запрос содержит «grant_type», «code» и «redirect_uri». Но где client_id и client_secret?
Кроме того, можете ли вы сказать мне, где я могу найти любую полезную документацию для DNOA? Мне нужно создать документацию, которая будет действительной и пригодной для всех платформ, а не только C#, которая может использовать DNOA.
Связанный вопрос: Я где-то читал, что мы не должны создавать коды авторизации для unauthentificated клиентов, но это именно то, что делает DNOA (так как я получаю код авторизации, даже если секрет не так). Это нормально?
Edit:
Это запрос, который я пытаюсь читать. Это токеновый запрос клиента DNOA. Я не вижу client_id и client_secret по другим параметрам, таким как «код», «redirect_uri» и «grant_type». Мне трудно быть вместе. Может быть, мне не хватает чего-то важного из http-запросов и ответов.
Когда я даю DNOA HandleTokenRequest (запрос) продолжить, он успешно аутентифицирует клиентское приложение (не выполняется, когда в конфигурационном файле клиента DNOA установлен плохой секрет).
Edit 2
private readonly WebServerClient Client;
protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
{
var authorization = Client.ProcessUserAuthorization();
if (authorization != null)
return authorization.AccessToken;
else
return null;
}
Это моя реализация QueryAccessToken. Это из какой-то выборки. Я думаю, что я создал это в начале и не менял его, потому что он работал.
Идти грубого источника DNOA Я узнал, что это метод от OAuth 1. Это может быть проблемой. Но вопрос в том, почему он работает нормально с правильными клиентскими экспертами и не работает с плохими.
Final редактировать
Похоже DNOA клиент использует HTTP Basic Authorization (client_id и секрет находятся в заголовке). Но мне нужен сервер DNOA, чтобы иметь возможность захватить эти параметры из POST.
Если кто-нибудь знает, как установить DNOA для поддержки client_id и client_secret в параметрах POST, это было бы потрясающе!
Спасибо
DNOA - сложный беспорядок. Не пытайтесь понять, что он делает. Просто прочитайте резюме спецификации OAuth2 в Интернете. – Phill
Я хотел бы сказать, что клиентское агентство «Возьмите спецификацию OAuth2 и развивайтесь против него», но я боюсь, что DNOA не реализует все, а не все одно и то же. , –
DNOA не является сложным и не беспорядочным. Вам не нужно исследовать все это, так как это намного больше, чем просто oauth2. Больше в моем ответе. –