azure - Office 365 v2 API 授权代码格式错误或无效

标签 azure office365 office365-restapi azure-ad-graph-api adal4j

我从浏览器中为授权我们的应用程序使用其 Office 365 电子邮件的用户复制了以下授权代码。

code=OAQABAAIAAADRNYRQ3dhRSrm-4K-adpCJ3J3UJ8GyC2qJDvNhlrUAObjph6sQ3A9waeQ5Tr-DA6WzxCdFbvadCRJw2S4a_lwA7MyelZWAPQZOlaB_X_1165CbmTXJMGioU6Cr0DhVTUzIlUv_-Svjp8DBrLVCxcDp5rJMM5mDNR0iGysuDIozWnOaPqCOl35NxPzyktrYK6D1MBptmXOPbhS-stTZXbHJr9gGE3FHzMU0XANXmTm30q4SPaoWPch-S1uFFL4xwS2oUv-lELBdcfIGh5UJBSraabGihVWUnbwBhh8eURSMRwryi7kubUcq0D27S-vIVZhtKopemQ1njAcExO58S7EgAyqbIzMxvmBXBe0X1ieVrcyHYRpt4ZAq1Z4v5HLTrYhx5fGp6AkqhV09yri3bqXaZvw5R1hKuhAbRDt_isZn_L8ZEhfwnqICGUwpDU27c6Qd1txuiOVY90a4BiAUh1M1u5gjDx8nIE88R7S915w7mUjJtCzZuTKQavve8q8UOtm9udUvBOX1f-bYslpgiIRbdSYBYlP9UrbreLS1W6OFk2NX-uqp9mabyImvvj1RUm166qV6uc9hsuhzrfErDURC17JotuQBSWYauAvb38p5B-cDbsCZafpyORlbrWsYyQcdWwUPL0aOZEQXFW-v3gDw7Xri_9hvsiHrj10NTaaozqm1QpZmMf-SHJ0yF9wBWKYgAA

如果我们使用 Microsoft Graph REST API v1,应用程序可以正常工作,但使用版本 2 时会出现以下问题。它注册了委托(delegate)权限,授予我们读取、写入/发送权限,该权限与应用程序的 V1 一起正常工作.

对于 V2:authority =https://login.microsoftonline.com/common/oauth2/v2.0/token 和 要检索身份验证代码,我使用以下网址

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=30..7&response_type=code&scope=mail.read&redirect_uri=https://myurl:8443/controller/saveToken

导致问题的代码块:

 @Override
    public AuthenticationResult getToken(String authCode) {

        ExecutorService service = Executors.newFixedThreadPool(1);
        OfficeCredentials credentials = getCredentials();

        try {
            AuthenticationContext context = new AuthenticationContext(credentials.getAuthority(), true, service);
            final Future<AuthenticationResult> resultFuture = context.acquireTokenByAuthorizationCode(
                    authCode, new URI(credentials.getRedirectUri()), new ClientCredential(credentials.getClientId(),
                            credentials.getClientSecret()), credentials.getResourceUrl(), null);

            return resultFuture.get();//throws exception

        } catch (URISyntaxException e) {
            logger.error(e.getMessage());
        } catch (MalformedURLException e) {
            logger.error(e.getMessage());
        } catch (Exception e) {
            logger.error(e.getMessage());

        }

        return null;

    }

调用resultFuture.get()时出现异常

java.util.concurrent.ExecutionException: com.microsoft.aad.adal4j.AuthenticationException: {"error_description":"AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid.\r\nTrace ID: c37b4aba-c5fb-44f3-815c-dd798072095d\r\nCorrelation ID: e190ccd2-f98a-440c-8e79-69cfcead3c04\r\nTimestamp: 2017-02-06 17:53:30Z","error":"invalid_grant"}

当我尝试迁移到 v2 时,我不知道自己做错了什么。 redirect_uri 与 azure 中的定义相同,它是 HTTPS。我已经按照 this 让我的本地环境不接受 HTTPS 。仅供引用:我正在使用 adal4 java 库。

最佳答案

目前,adal4j 库不支持 Azure AD v2.0 端点(请参阅 here )。如果我们为 v2.0 端点设置了权限,它仍然使用旧的权限。

作为解决方法,您可以直接编写 HTTP 请求。以下是示例请求供您引用(引用 here ):

POST: https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token

client_id={clientId}&client_secret={clientSecret}&scope={scope}&code={authorizationCode}&grant_type=authorization_code&redirect_uri={redirectUri}

如果您希望 adal4j 库支持 Azure AD v2.0 端点,您可以从 here 提交反馈.

关于azure - Office 365 v2 API 授权代码格式错误或无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42074320/

相关文章:

office365 - 如何获取永不过期的访问 token office365 Rest api?

azure - 使用 OpenAM 创建 WS-Federation 身份提供商

Azure 应用服务 - 从表 Controller 更新对象

vba - 以列宽和行高显示Excel形状的尺寸vba

internet-explorer - 无法激活 Office 365,因为 cookie 被阻止

odata - 使用 ODATA 获取每个用户的最新记录

office365 - 如何在 O365 Calendar REST API v2.0 中的 OData 参数中处理开始和结束时区?

azure - 查看 Sprint 跟踪板上的错误

Azure Devops 管道未选择最新的 Visual Studio 版本

asp.net-mvc - Office 365 和 Azure 集成