如何使用OAuth 2.0对Azure Active Directory进行身份验证?

时间:2015-02-18 10:08:32

标签: c# authentication azure oauth-2.0 azure-active-directory

我有一个用C#编写的REST API,我需要使用现有的Azure AD服务进行身份验证。我目前拥有希望进行身份验证的用户的用户名和密码。我需要使用Azure AD进行身份验证,并从服务器接收访问令牌。

有人可以指点我解释如何做到这一点的一些文章/教程的方向?

2 个答案:

答案 0 :(得分:17)

您应该避免处理用户凭据。收集通过使用OAuth 2.0或OpenID Connect来获取令牌而不直接处理凭据而减轻的用户凭据时,会产生严重的安全隐患。此外,如果您拥有自己的凭据集合UI,那么如果启用了多因素身份验证,您可能会发现将来登录失败。在这种情况下,可能需要更多信息来验证用户而不是收集信息,例如一次性密码。如果您允许Azure AD通过OAuth 2.0或OpenID Connect提供身份验证体验,那么您将与所使用的特定身份验证方法隔离。如果可能的话,收集用户Azure AD凭据是一种不好的做法。

我没有足够详细的具体情况确信以下示例适用,但它至少会提供一个良好的起点。此示例演示如何创建调用REST API的本机应用程序,然后以最安全的方式调用Azure资源。

https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet

您可以在此处找到许多其他样本,可用于为您的特定方案构建解决方案。

https://github.com/AzureADSamples

如果您提供更多详细信息,我可以提供更具体的指导。

答案 1 :(得分:4)

请参阅:http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

要点: 创建UserCredential

UserCredential uc = new UserCredential(user, password);

使用UserCredential

调用其中一个AcquireToken()函数
public AuthenticationResult AcquireToken(string resource, string clientId, UserCredential userCredential);
public Task<AuthenticationResult> AcquireTokenAsync(string resource, string clientId, UserCredential userCredential);