真诚的道歉,如果我错过了这篇文章的内容,因为我在读完了几个小时之后我的智慧结束了.
我正在尝试编写一个后端服务(Windows),它将通过Azure AD连接到MS Graph API.我正在使用C#来破坏概念验证,但是在MS文档,博客等方面遇到了很多问题,这些问题相当令人费解并且质量很差.他们似乎都认为他们的API的消费者是前端桌面或基于浏览器的应用程序.
无论如何,我设法使用服务帐户的UserPasswordCredential连接到Graph,我在AuthenticationContext响应中收到一个令牌,但没有刷新令牌信息.MSDN建议该方法可能会返回刷新信息,但嘿嘿,它可能不会.
此外,阅读(或尝试阅读)ADAL 3上的博客文章(从2015年开始):
让我对刷新现在的工作方式感到困惑.这篇文章似乎暗示着令人神奇的是令牌在缓存中为你刷新,但在用我的POC测试之后情况并非如此.
我也从MS中看到了这篇文章,似乎在标题中指出:
https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365
然而,需要你注册应用程序,跳过弹出式箍允许访问等等.
由于我的样本正在运行,我已经尝试安排重新认证,希望在获得初始令牌(持续60分钟)后50分钟获得新令牌但是我得到相同的令牌.这意味着在60分钟1秒内,通过客户端的任何调用都会抛出异常(ServiceException,我必须检查里面的文本以查看令牌到期相关信息).对我来说,无法重新验证和刷新令牌以继续使用客户端进行更"无缝"的使用是没有意义的.
这是我的代码的精简版示例:
namespace O365GraphTest
{
using Microsoft.Graph;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Nito.AsyncEx;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using System.Security;
public class Program
{
// Just use a single HttpClient under the hood so we don't hit any socket limits.
private static readonly HttpProvider HttpProvider = new HttpProvider(new HttpClientHandler(), false);
public static void Main(string[] args)
{
try
{
AsyncContext.Run(() => …
Run Code Online (Sandbox Code Playgroud)