2016-09-28 145 views
0

我已经使用Microsoft Graph API创建webhook项目来监视Office 365收件箱。自动更新到Microsoft Graph API订阅

我制成,其更新它3天仅作为根据本文档的UpdateSubscription动作方法提供https://graph.microsoft.io/en-us/docs/api-reference/v1.0/resources/subscription

下面是我'如何促进HTTP请求更新的订阅

代码段
 AuthenticationResult authResult = await AuthHelper.GetAccessTokenAsync(); 

     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // Build the request. 
     string subscriptionsEndpoint = "https://graph.microsoft.com/v1.0/subscriptions/"+id; 
     var method = new HttpMethod("PATCH"); 

     HttpRequestMessage request = new HttpRequestMessage(method, subscriptionsEndpoint); 

     //get the current time 

     var subscription = new Subscription 
     { 
      //Id = id, 
      ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 4230, 0) 
     }; 

有没有方法可以自动更新而不需要用户按下'更新'按钮?

由于授权标头需要AuthResult.accessToken,这将要求用户登录Office365帐户。

请指点

+0

我能够通过从HttpRuntimeCache中检索'RefreshToken'来更新用户的订阅,该RefreshToken用于使用以下方法获取访问令牌GetAccessTokenFromRefreshTokenAsync。然而,在执行应用程序重启时,缓存将不会有'RefreshToken'。将它存储在数据库中是否安全? –

回答

1

提供给您一个选项是服务或守护程序的方式(https://graph.microsoft.io/en-us/docs/authorization/app_only)。与使用登录用户进行身份验证相比,您可以使用持有者令牌续订应用程序级别的订阅,而持有者令牌又由Azure AD的CLIENT_SECRET生成。

我不认为在数据库中存储令牌是正确的方法。我的理解是安全令牌永远不适合数据库。

实际上,我并不完全理解在这里需要用户登录的必要性,除非您没有提及该程序的某些部分。像我提到的那种服务可以监视邮箱,而不需要用户在那里,否则如果程序要求用户在那里,那么确实不存在丢失凭证的问题。

0

enter image description here您可以使用此方法使用grant_type密码从azure获取accesstoken。 PLease找到下面的截图。