簡體   English   中英

無需用戶干預即可進行 OAuth 2 授權代碼授予/流程

[英]Make OAuth 2 Authorization Code Grant/Flow without user intervention

嘗試訪問需要授予類型授權代碼的 API 資源。 我可以使用 Postman 及其授權工具取回有效的訪問代碼。

在此處輸入圖片說明

這涉及 Postman 彈出一個登錄窗口,我在其中輸入用戶名和密碼。

如何在沒有用戶干預的情況下完全有問題地完成這項工作? 這種授予類型似乎是唯一一種與此 API 配合使用的類型,因為當我嘗試將 client_id 和 client_secret 與客戶端憑據流一起使用時,我取回的訪問令牌不允許我進入 API (401)。

我希望盡可能做到與代碼無關。 那就是我希望能夠在不依賴在幕后做事的庫的情況下做到這一點。 理想情況下,一切都將通過 HTTP 完成,就像使用 cURL。

我有一些 C# 代碼older version 2.29.0.1078我的要求,但它使用了Microsoft.IdentityModel.Clients.ActiveDirectory庫( older version 2.29.0.1078 )。 好像可以通過傳入用戶名和密碼來獲取token

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庫的情況下做到這一點。

如果它是您的 API 之一,則正確的方法是在 API 中添加對客戶端憑據身份驗證和應用程序權限的支持。 看到它可能是 Dynamics,這對您來說可能是不可能的。 在這種情況下,您可以使用授權代碼流為用戶獲取初始令牌,然后您可以在需要時使用刷新令牌獲取新令牌。 在最后一種情況下,您可以使用 Resource Owner Password Credentials 流來獲取令牌。 但請注意,此流程不支持 MFA 等。

Hackish:你可以做 UI 解析,然后模仿標准的用戶登錄過程

正確的方法是使用更好的流程,這是使用的 IdP 允許的,例如直接授予流程(資源所有者密碼憑據授予流程)`。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM