我使用 adal4j 授权 clientId/secret 组合访问共享日历。
这是我用来获取访问令牌的代码。
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(m_authorityUrl, false, service);
ClientCredential creds = new ClientCredential(m_clientId, m_clientSecret);
Future<AuthenticationResult> future = context.acquireToken(Url, creds, null);
result = future.get();
}
在我的情况下,我使用https://login.windows.net/common/oauth2/token作为 m_authorityUrl,客户端 ID 的注册应用程序的 applicationId,秘密是在 Azure 门户中生成的。
但是,当使用返回的密钥(长度为 1082 个字符!)时,我收到了一个 Http 401 代码(即未经授权)。我使用 result.getAccessKey() 函数获取密钥,然后将其添加为标题...
.addHeader("authorization", "Bearer " + m_accessKey)
这是使用访问密钥的正确方法,还是我访问错误!?
PS 我知道密钥有问题,好像我使用了使用 Postman 生成的令牌来测试调用一样。代码的其余部分运行良好 - 所以 oauth 令牌要么错误,要么客户端未授权......无论如何要破译哪个?(据我所知,该应用已在 Azure 门户中获得授权)。