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

Need change message properties (subject etc.) in read scenario

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

1) getCallbackTokenAsync - 在服务器端出现错误,没有足够的权限从 EWS 更新项目。

2) getUserIdentityTokenAsync - 在服务器端出现错误,没有足够的权限在服务器端调用 ConvertId,以及“当尝试在客户端或 server-side 调用 UdateItem 时,客户端出现旧项目 ID 格式错误。

3) 通过 OAuth 2 访问代码流获取用户同意和令牌 - 失败(在 IE 中导航由于 iframe 沙箱而被阻止,并且 window.open 被 MS 为该应用程序 iframe 加载)(在 Chrome 导航是允许的,理论上它可以工作,但是像 /api/items/{exchange item id} 这样的 url 是错误 404.11 的结果(从沙箱 iframe 发送时检测到双重转义)。

4) 在 server-side 使用 grant_type=client_credentials [使用客户端 ID 和客户端密码] 获取访问令牌有效,但结果令牌被视为 "low security"(保护1 级,而 2 级是必要的)。已知表单错误 401 Unauthorized with x-ms-diagnostics header 在尝试更新项目时被返回。

PS:提醒一下我尝试在 READ 视图下更新项目,而不是在 edit/compose 模式下。

感谢帮助!

PS:Application-wide 使用 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;

    }

客户端凭据流要求您使用证书而不是客户端 ID/secret 组合。只要将自签名证书上传到您的应用程序注册清单,就可以使用它。有关详细信息,请参阅 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