如何从 Azure Graph API 获取基于用户的令牌
How to acquire a user based token from Azure Graph API
我有一个 Azure Active Directory,在我的 Web Api 我有一段代码,我可以使用我在 Azure 注册的应用程序从 Azure Graph Api 获取令牌,并且客户证书。
这是我现在使用的代码:
public static string AcquireServiceToken()
{
var authority = string.Format(_authority, "common");
var authContext = new AuthenticationContext(authority);
var result = authContext.AcquireToken(_serviceTokenResourceId, new ClientAssertionCertificate(_serviceTokenClientId, GetClientCertificate(_certThumbprint)));
return result.AccessToken;
}
这段代码工作得很好,现在我需要的是一个更具体的令牌,它具有登录用户的上下文,所以基本上我需要能够传入用户名和密码并取回 Graph 令牌来自蔚蓝。
有什么想法吗?
AcquireToken 有另一个接受 UserCredential 对象的重载,你假设你可以使用它(你将需要你需要为其获取令牌的用户的 Active Directory 的 TenantId)
您的函数将如下所示:(请使用您自己的应用程序信息填写 _variables)
public static string AcquireTokenWithoutUserCredentials(string userName, string password)
{
var authContext = new AuthenticationContext(string.Format(_authority, _userTokenTenantId));
var userCreds = new UserCredential(userName, password);
var result = authContext.AcquireToken(_resourceId, _userTokenClientId, userCreds);
return result.AccessToken;
}
查看您的代码,您似乎有一个多租户场景,其中您使用 "common" 作为 TenatName,我不确定 how/if 它是否可以使用我粘贴的代码在这里但试一试...
Web API 可以通过代理流程获取新令牌,以当前用户身份访问另一个 Web API(在本例中为 Graph)。有关示例,请参见 https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof。不建议直接使用用户名和密码,永远不要在 Azure AD 自己的页面之外收集凭据,在这种特定情况下它不会工作(或将很快停止工作)
我有一个 Azure Active Directory,在我的 Web Api 我有一段代码,我可以使用我在 Azure 注册的应用程序从 Azure Graph Api 获取令牌,并且客户证书。 这是我现在使用的代码:
public static string AcquireServiceToken()
{
var authority = string.Format(_authority, "common");
var authContext = new AuthenticationContext(authority);
var result = authContext.AcquireToken(_serviceTokenResourceId, new ClientAssertionCertificate(_serviceTokenClientId, GetClientCertificate(_certThumbprint)));
return result.AccessToken;
}
这段代码工作得很好,现在我需要的是一个更具体的令牌,它具有登录用户的上下文,所以基本上我需要能够传入用户名和密码并取回 Graph 令牌来自蔚蓝。 有什么想法吗?
AcquireToken 有另一个接受 UserCredential 对象的重载,你假设你可以使用它(你将需要你需要为其获取令牌的用户的 Active Directory 的 TenantId)
您的函数将如下所示:(请使用您自己的应用程序信息填写 _variables)
public static string AcquireTokenWithoutUserCredentials(string userName, string password)
{
var authContext = new AuthenticationContext(string.Format(_authority, _userTokenTenantId));
var userCreds = new UserCredential(userName, password);
var result = authContext.AcquireToken(_resourceId, _userTokenClientId, userCreds);
return result.AccessToken;
}
查看您的代码,您似乎有一个多租户场景,其中您使用 "common" 作为 TenatName,我不确定 how/if 它是否可以使用我粘贴的代码在这里但试一试...
Web API 可以通过代理流程获取新令牌,以当前用户身份访问另一个 Web API(在本例中为 Graph)。有关示例,请参见 https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof。不建议直接使用用户名和密码,永远不要在 Azure AD 自己的页面之外收集凭据,在这种特定情况下它不会工作(或将很快停止工作)