Azure 活动目录授权代码

Azure Active Directory Authorization Code

我有一个 WCF 服务需要最终获得令牌才能与 Azure 中托管的 Web api 服务通信。我们的本地活动目录与我们的 Azure 帐户同步。

最初我在 win forms 应用程序中玩了一个游戏,并使用以下方法成功获得了令牌:

AuthenticationResult authResult = authContext.AcquireToken(apiResourceId, clientId, redirectUri);

这虽然弹出了一个登录对话框,但对 windows 服务没有多大用处。然后我研究了 AcquireTokenSilent() 的使用。然而,这一直抛出异常告诉我调用 AcquireToken 所以回到方块 1。

我的下一个目标是查看 AcquireTokenByAuthorizationCode()。不过,我的问题是如何获取作为第一个参数的授权码。

我试过:

var url = authContext.GetAuthorizationRequestURL(apiResourceId, clientId, redirectUri, UserIdentifier.AnyUser, string.Empty);

HttpClient hc = new HttpClient();
HttpResponseMessage hrm = hc.GetAsync(url).Result;

这只是 returns 一个 html 页面显示我认为是 Microsoft 登录页面。它肯定不包含任何代码。

对我做错了什么有什么想法吗?

AcquireTokenSilent 仅在缓存中已有令牌时才起作用,而在您的场景中并非如此。 AcquireTokenByAuthorizationCode 旨在在服务器端被起诉。 https://github.com/Azure-Samples/active-directory-dotnet-native-headless 中显示了无需在客户端弹出对话框即可获取令牌的主要方法,但存在重要限制。如果它们在您的场景中运行良好,否则您可能会考虑创建一个持久缓存,通过进行一次交互式身份验证来启动它,然后通过 AcquireTokenSilent 从您的服务中继续使用相同的缓存。只要您每 14 天至少使用一次,缓存的刷新令牌将持续 90 天。