在阅读场景中需要更改消息属性(主题等)

时间:2015-01-30 22:04:38

标签: office365 exchangewebservices

有一个可能看起来很奇怪的问题,但我有项目要求为阅读模式实现outlook web app(内容应用程序)的以下功能 - 更新正在查看的项目(消息或约会)的主题。 方法尝试:

1)getCallbackTokenAsync - 在服务器端获得错误,即没有足够的权限来更新EWS中的项目。

2)getUserIdentityTokenAsync - 在服务器端获取错误的权限不足以在服务器端调用ConvertId,并且在尝试在客户端或服务器端调用UdateItem时在客户端获取“Legacy Item Id格式错误。”

3)获得用户同意和令牌通过OAuth 2访问代码流 - 失败(在IE导航中由于iframe沙箱被阻止,而window.open被MS用于该应用iframe的权限)(在Chrome导航中允许,以及理论上它会起作用,但像/ api / items / {exchange item id}这样的网址会导致错误404.11(从沙箱iframe发送时检测到双重转义)。

4)使用grant_type = client_credentials [具有客户端ID和客户端密码]在服务器端获取访问令牌,但结果令牌被认为是“低安全性”(保护级别1,而级别2是必需的)。已知表单错误401 Unauthorized with x-ms-diagnostics header is try to update item。

PS:只是提醒我在READ视图中尝试更新项目,而不是在编辑/撰写模式下。

感谢您的帮助!

PS:使用ADAL进行应用程序范围的证书身份验证调用,因为我看起来像这样:

    public async Task<JObject> PrepareApplicationAuthenticationToken()
    {
        var authContext = new AuthenticationContext(
            GetAuthorityUrl()
            .ToString()
        );

        var result = await authContext.AcquireTokenAsync(
            GetResourceUrl(),
            new ClientAssertionCertificate(GetClientId(), AppCertificateHelper.GetCertificate())
        );

        var token = JSON.LoadFromString(result.Serialize());
        token["access_token"] = result.AccessToken;
        token["refresh_token"] = result.RefreshToken;
        return token;

    }

1 个答案:

答案 0 :(得分:1)

客户端凭据流要求您使用证书而不是客户端ID /机密组合。您可以使用自签名证书,只要将其上传到您的应用注册清单即可。有关详细信息,请参阅http://blogs.msdn.com/b/exchangedev/archive/2015/01/21/building-demon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow.aspx