Сделать OAuth 2 код авторизации доступным без вмешательства пользователя - PullRequest
0 голосов
/ 21 февраля 2020

Попытка получить доступ к ресурсу API, для которого требуется код авторизации типа предоставления. Я могу вернуть действительный код доступа с помощью Почтальона и его инструмента авторизации.

enter image description here

Для этого Почтальон открывает окно входа в систему, где я ввожу имя пользователя и пароль.

Как я могу выполнить sh это чисто проблематично без вмешательства пользователя? Этот тип предоставления, по-видимому, является единственным, который работает с этим API, поскольку, когда я просто пытаюсь использовать client_id и client_secret с потоком учетных данных клиента, токен доступа, который я получаю, не позволяет мне войти в API (401).

Я хочу сделать это как код агности c, насколько это возможно. То есть я хотел бы иметь возможность делать это, не полагаясь на библиотеку, которая делает что-то за кулисами. В идеале все было бы сделано через HTTP, как с cURL.

У меня есть некоторый код C#, который делает то, что я ищу, но использует библиотеку Microsoft.IdentityModel.Clients.ActiveDirectory (older version 2.29.0.1078). Кажется, можно получить токен, передав имя пользователя и пароль

string userName = "johndoe";
string password = "mydoghasfleas";
string clientId = "7934579357js487dhj444";
clientBaseUrl = "https://mycompanyname.dynamics.com";
apiEndpointUrl = clientBaseUrl + "/data/resource=XYZ";

UserCredential credential = new UserCredential(userName, password);
AuthenticationContext authContext = new AuthenticationContext(apiEndpointUrl, false);
AuthenticationResult authResult = await authContext.AcquireTokenAsync(clientBaseUrl, clientID, credential);

Я пытаюсь понять, как это сделать, не завися от библиотеки Microsoft.IdentityModel.Clients.ActiveDirectory.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Если бы это был один из ваших API, правильным подходом было бы добавить поддержку аутентификации учетных данных клиента и разрешений приложения в API. Видя, что это, вероятно, Динамика, это, вероятно, не возможно для вас. В этом случае вы можете использовать поток кода авторизации для получения начальных токенов для пользователя, а затем вы можете использовать токен refre sh для получения нового токена, когда это необходимо. В последнем случае вы можете использовать поток Credentials Password Resource Owner для получения токенов. Но будьте осторожны, этот поток не поддерживает MFA et c.

0 голосов
/ 21 февраля 2020

Hacki sh: вы можете выполнить анализ пользовательского интерфейса, а затем просто mimi c стандартная процедура входа пользователя в систему

Правильный подход будет заключаться в использовании лучшего потока, который допускается используемым IdP, например, Direct Grant Flow (Поток предоставления учетных данных пароля владельца ресурса)..

...