Azure Active Directory授权码

时间:2015-10-05 15:35:22

标签: c# wcf azure active-directory adal

我有一个WCF服务,需要最终获得一个令牌来与azure中托管的web api服务进行通信。我们的内部活动目录与我们的azure帐户同步。

最初,我在win form app中玩了一个游戏并使用以下内容成功获得了一个令牌:

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;

这虽然只是返回一个html页面,显示我认为微软登录页面。它当然不包含任何代码。

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

只有在缓存中已有令牌时,AcquireTokenSilent才有效,而在您的场景中并非如此。 AcquireTokenByAuthorizationCode意味着在服务器端起诉。 https://github.com/Azure-Samples/active-directory-dotnet-native-headless中显示了在不在客户端弹出对话框的情况下获取令牌的主要方式,但存在重要的限制。如果它们在您的场景中工作正常,则可以考虑创建持久性缓存,通过执行一次交互式身份验证来启动它,然后通过AcquireTokenSilent继续使用服务中的相同缓存。只要您每14天至少使用一次,缓存的刷新令牌将持续90天。