Поток учетных данных владельца ресурса с помощью JavaScript и IdentityServer — не разрешено?

У меня есть веб-сайт JS, который пытается получить токен доступа, передавая имя пользователя и пароль. Я также поддерживаю сервер авторизации, поэтому я считаю клиент JS доверенным. Я могу сделать это с помощью ASP.net 4.5.x. но когда я пытаюсь сделать то же самое с IdentityServer, я получаю invalid_client.

Сейчас я пробую ASP.net 5, и я считаю, что старое промежуточное ПО OWIN для работы в качестве поставщика удостоверений больше не будет поддерживаться, и они защищают IdentityServer, когда мы хотим быть поставщиком удостоверений.

POST /connect/token HTTP/1.1
Host: localhost:59766
Content-Type: application/x-www-form-urlencoded

username=admin&password=pw&grant_type=password

Я думаю, что IdentityServer сначала требует информацию о клиенте, но это будет означать, что мне придется выставлять client_secret на веб-странице (или в родном мобильном приложении), что, я считаю, не разрешено согласно спецификациям OAuth.

Как отключить требование клиента с помощью IdentityServer?

На github IdentityServer я вижу только код C#, который собирает учетные данные клиента, а также имя пользователя и пароль для получения токена доступа для потока учетных данных владельца ресурса здесь. Что такое эквивалентный необработанный HTTP-запрос?

Лично меня не волнует, попытается ли другое приложение выдать себя за моего клиента. Это действительно учетные данные пользователя, которые в любом случае разрешат доступ к чему-либо.


person Mickael Caruso    schedule 24.09.2015    source источник
comment
Примечание: если вы ищете эквивалент OAuthAuthorizationServerMiddleware в ASP.NET 5 (сервер авторизации OAuth2 в OWIN/Katana/Web API), вы можете попробовать AspNet.Security.OpenIdConnect.Server: stackoverflow.com/questions/30768015/. Он поддерживает именно тот сценарий, которого вы пытаетесь достичь, не требуя аутентификации клиента.   -  person Kévin Chalet    schedule 24.09.2015
comment
Я пробовал это, но не могу заставить генератор токенов написать 3-ю часть JWT. Я спрошу это в будущем вопросе.   -  person Mickael Caruso    schedule 25.09.2015


Ответы (1)


В IdentityServer3 аутентификация клиента является обязательной: запрос токена не может быть проверен, если учетные данные клиента отсутствуют в запросе, независимо от того, какой тип предоставления вы используете (код авторизации, токен обновления, пароль владельца ресурса). ).

Конечно, это не совсем соответствует спецификациям, поскольку аутентификация клиента не требуется для общедоступных приложений, таких как приложения JS, но я думаю, что это требование здесь, чтобы побудить вас использовать вместо этого неявный поток (https://tools.ietf.org/html/rfc6749#section-4.3.2)

Если вы действительно хотите использовать ROPC с IdentityServer, вы можете передавать учетные данные клиента с другими параметрами OAuth2:

POST /connect/token HTTP/1.1
Host: localhost:59766
Content-Type: application/x-www-form-urlencoded

client_id=id&client_secret=not_secret_at_all&username=admin&password=pw&grant_type=password&scope=read+write
person Kévin Chalet    schedule 24.09.2015
comment
Вышеупомянутое по-прежнему не работает. Я все еще получаю 400 с invalid_client. Я установил поток клиента как владельца ресурса. - person Mickael Caruso; 25.09.2015
comment
Не забудьте также указать параметр области действия. Я пробовал без явной области, и это действительно потерпело неудачу. - person Kévin Chalet; 26.09.2015
comment
Ребята, вы знаете библиотеку javascript для использования ROPC против сервера идентификации так же, как мы используем oidc-клиент? - person Carlos Torrecillas; 17.07.2020