我正在尝试连接到Graph API并获取用户访问令牌。
我的问题是,我不知道如何使用凭据静默连接到Graph API(没有浏览器)。
我目前使用MSLogin()
获取访问令牌,但它会打开一个浏览器,您可以在浏览器中授权AzureAD应用程序访问您的帐户。Java中的一个库与我在c#https://github.com/Litarvan/OpenAuth中想要的差不多
我需要这样的东西:MSGraph.ConnectAsync(email, pass).getAccessToken();
下面是我的当前代码(通过浏览器)
private const string ClientId = "520f6e8e-xxxxxxxxxxxxxxxxxxxx";
private string[] scopes = { "https://graph.microsoft.com/user.read" };
private static AuthenticationResult authResult;
public static IPublicClientApplication PublicClientApp;
private async Task<AuthenticationResult> MSLogin()
{
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId).WithRedirectUri("msal520f6e8e-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx://auth").Build();
authResult = await PublicClientApp.AcquireTokenInteractive(scopes).ExecuteAsync();
return authResult;
}
3条答案
按热度按时间zqdjd7g91#
如果您使用的是Microsoft Graph .NET Client Library,您可以查看有关如何实现
username/password authentication flow
的示例文档。xfyts7mz2#
您可以使用AcquireTokenByUsernamePassword(),参见MSDN。
但是请注意,微软不鼓励使用这种流,根据您的AzureAD设置,可能会有限制(即,您只能在特定的IP范围内获取令牌,等等)。
fjnneemd3#
你可以静默获得访问令牌,但不是第一次,首先用户必须通过微软的登录流程授权你的应用程序,对于你随后对微软的调用,你可以在没有用户干预的情况下获得访问令牌。
我只会给出一个基本的想法,而不是集中在您可能正在使用的特定
SDK
上。对于哪种方法,您可以决定哪种方法适合您的需要。1.我假设您已经随身携带了您的凭据和所需的作用域,否则您需要获得这些。
1.使用您获得的凭据制定正确的URL,并且需要在URL中添加一个额外的作用域,即
offline_access
。然后,您需要将用户重定向到Microsoft进行初始授权。1.如果用户登录成功,微软会使用
Authorization Code
将用户重定向回您的网站。1.获取授权码,并使用
/oauth2/{version}/token
API将其交换为Access Token
。1.您将收到上述调用的响应,其中包含
Access Token
和Refresh Token
。您需要将刷新令牌存储在某个位置以供将来使用。现在是有趣的部分。
1.使用
refresh token
,您可以在访问令牌到期时续费,无需用户干预。您可以使用带参数的oauth2/v2.0/token
API:由此产生的响应如下所示:
参考:https://docs.microsoft.com/en-us/graph/auth-v2-user#authorization-request