0

尝试访问需要授予类型授权代码的 API 资源。我可以使用 Postman 及其授权工具取回有效的访问代码。

在此处输入图像描述

这涉及 Postman 弹出一个登录窗口,我在其中输入用户名和密码。

在没有用户干预的情况下,我如何才能完全解决这个问题?此授权类型似乎是唯一与此 API 一起使用的类型,因为当我尝试将 client_id 和 client_secret 与客户端凭据流一起使用时,我返回的访问令牌不允许我进入 API (401)。

我希望尽可能与代码无关。那就是我希望能够在不依赖在幕后做事的库的情况下做到这一点。理想情况下,一切都将通过 HTTP 完成,就像 cURL 一样。

我有一些 C# 代码可以满足我的需求,但它使用了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图书馆的情况下做到这一点。

4

2 回答 2

1

如果它是您的 API 之一,正确的方法是在 API 中添加对客户端凭据身份验证和应用权限的支持。看到它可能是动态的,这对你来说可能是不可能的。在这种情况下,您可以使用授权代码流来获取用户的初始令牌,然后您可以在需要时使用刷新令牌来获取新令牌。在最后一种情况下,您可以使用资源所有者密码凭证流来获取令牌。但请注意,此流程不支持 MFA 等。

于 2020-02-21T06:11:23.910 回答
0

Hackish:您可以进行 UI 解析,然后模仿标准用户登录过程

正确的方法是使用更好的流程,这是使用的 IdP 所允许的,例如直接授予流程(资源所有者密码凭据授予流程)`。

于 2020-02-20T21:59:02.943 回答