无需打开Web浏览器即可直接使用Windows Azure Active Directory进行身份验证

时间:2013-08-23 07:21:33

标签: c# authentication azure securestring azure-active-directory

我提到this questionthis MSDN post,但无法解决问题。

下面的代码演示了如何使用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 ClientCredentialCredential的子类)。需要注意的是,此类属于namespace Microsoft.WindowsAzure.ActiveDirectory.Authentication 以下是它的构造函数:

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

在线搜索,我得不到多少答案,我确实得到this link。但SecureString的部分再次对我来说是一个谜。如何使用SecureString来传达用户名/密码/域名?

3 个答案:

答案 0 :(得分:4)

旧版AAL支持此功能。然而,它在大约2-3个月前被移除(以及显示它的样本)。现在,用户身份验证只能通过浏览器身份验证窗口来实现。

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

答案 1 :(得分:2)

您找到的ClientCredential AcquireToken超载是您使用客户端ID和密钥进行身份验证(以便客户不必共享其用户名和密码)。

创建一个" Web应用程序"在WAAD中,应用程序将被赋予客户端ID guid。这是ClientCredential()构造函数中的第一个参数。

要获取第二个参数,请在WAAD Web应用程序中添加一个键。

您可能希望更新到最新版本的AAL,现在称为ADAL。 NuGet link

答案 2 :(得分:2)