2016-09-28 1 views
0

J'ai créé un projet webhook avec Microsoft Graph API pour surveiller la boîte de réception Office 365.Mise à jour automatique de l'abonnement API Microsoft Graph

J'ai fait une méthode d'action UpdateSubscription qu'elle renouvelle pendant 3 jours seulement en fonction de la documentation fournissent sur https://graph.microsoft.io/en-us/docs/api-reference/v1.0/resources/subscription

est Ci-dessous l'extrait de code de la façon dont I'am faciliter la requête HTTP de mettre à jour l'abonnement

 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) 
     }; 

Y at-il un moyen de mettre à jour automatiquement sans que l'utilisateur appuie sur le bouton pour «mettre à jour»?

car les en-têtes d'autorisation requièrent AuthResult.accessToken, ce qui nécessite que l'utilisateur se connecte au compte Office365.

S'il vous plaît conseiller

+0

J'ai pu mettre à jour l'abonnement de l'utilisateur en récupérant le 'RefreshToken' du HttpRuntimeCache qui est utilisé pour obtenir le jeton d'accès en utilisant la méthode suivante GetAccessTokenFromRefreshTokenAsync. Cependant, lors d'un redémarrage de l'application, le cache n'aura pas le 'RefreshToken'. Est-il sûr de stocker cela dans une base de données –

Répondre

1

Une option à votre disposition est l'approche de service ou démon (https://graph.microsoft.io/en-us/docs/authorization/app_only). Au lieu de s'authentifier auprès d'un utilisateur connecté, vous pouvez renouveler l'abonnement au niveau de l'application à l'aide d'un jeton de support généré à son tour par CLIENT_SECRET à partir d'Azure AD.

Je ne pense pas que stocker des jetons dans la base de données est la bonne approche ici. Ma compréhension est que les jetons de sécurité ne sont jamais appropriés pour une base de données.

En fait, je ne comprends pas très bien le besoin d'avoir un utilisateur qui se connecte ici, sauf s'il y a des parties du programme que vous n'avez pas mentionnées. Un service comme celui que j'ai mentionné peut surveiller une boîte aux lettres sans qu'un utilisateur soit là, ou bien si le programme exige que l'utilisateur soit là, il n'y a pas vraiment de problème d'identifiants perdus.

0

enter image description here Vous pouvez utiliser cette approche pour récupérer accesstoken à partir d'azure en utilisant grant_type un mot de passe. VEUILLEZ trouver la capture d'écran ci-dessous.