4

我提到了这个问题这个 MSDN 帖子,但无法解决问题。

下面的代码演示了如何使用 Web 浏览器执行 WAAD 身份验证:

AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/" + myDomain);
AuthenticationResult result = auth.AcquireToken(resource, clientID, resourceAppIDURI);

这将打开一个浏览器,并要求用户输入可以正常工作的详细信息。

但是,我有一个 GUI 客户端,它可以自己获取用户名/密码/域。因此,其目的是从 GUI 客户端收集详细信息并直接提供给 WAAD 服务器并获得用户身份验证。

怎么做?

仅查看 的重载AcquireToken(),我确实得到了一些线索(这也可能是错误的):

AuthenticationResult AcquireToken (string resource, Credential credential);

AuthenticationResult AcquireToken (string authorizationCode, string redirectUri, ClientCredential credential);

但我不明白,如何创建class ClientCredential(的子类Credential)。需要注意的是,这个类属于namespace Microsoft.WindowsAzure.ActiveDirectory.Authentication.
下面是它的构造函数:

ClientCredential(string clientId, SecureString secureClientSecret);
ClientCredential(string clientId, string clientSecret);

网上搜了一下,没找到答案,我确实得到了这个链接。但是这部分SecureString对我来说又是一个谜。如何使用用户名/密码/域进行通信SecureString

4

2 回答 2

4

旧版本的 AAL 支持这一点。但是,它在大约 2-3 个月前被删除(以及显示它的示例)。现在用户的认证只能通过浏览器认证窗口来实现。

我不是 100% 确定,但我认为动机是创建标准/一致的登录体验(针对最终用户)。如果您使用的是 Windows 8 应用程序,则 WebAuthenticationBroker 会处理此问题,并且用户会为所有 Windows 8 应用程序识别此问题。如果您是 Web 应用程序,则会显示 AzureAD 登录页面并且可以识别。

于 2013-08-24T18:40:55.233 回答
2

您发现的ClientCredential重载AcquireToken是让您使用客户端 ID 和密钥进行身份验证(这样客户就不必共享他们的用户名和密码)。

在 WAAD 中创建一个“Web 应用程序”,该应用程序将获得一个客户端 ID GUID。这是ClientCredential()构造函数中的第一个参数。

要获取第二个参数,请将密钥添加到您的 WAAD Web 应用程序。

您可能想要更新到 AAL 的最新版本,现在称为 ADAL。NuGet 链接

于 2014-03-20T12:08:17.987 回答