【发布时间】:2020-12-30 16:24:55
【问题描述】:
在我的情况下,我需要在我的 MS Teams 机器人(消息扩展)中接收并保存为tenantId 指定的访问令牌,以便进一步访问 Graph API。有很多关于将代表用户身份验证流程添加到机器人 (https://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/authentication/add-authentication?tabs=dotnet%2Cdotnet-sample) 的信息。在这种情况下,我们需要在 Azure 门户上注册附加应用程序(身份提供程序)并将其连接到机器人(OAuth 连接设置)... 但是,就我而言,我需要实现客户端凭据身份验证流程,并使用在 Azure 门户上注册的机器人应用程序的凭据(AppId 和机密)接收访问令牌。为了实现这个目标,我可以使用 msal4j 库,例如:
public static String getAppAccessToken(String[] scopes) {
ConfidentialClientApplication cca;
try {
cca = ConfidentialClientApplication.builder(applicationId, ClientCredentialFactory.createFromSecret(applicationSecret))
.authority("https://login.microsoftonline.com/<<tenantId>>/")
.build();
} catch (MalformedURLException e) {
return null;
}
Set<String> scopeSet = Set.of(scopes);
ClientCredentialParameters clientCredentialParam = ClientCredentialParameters.builder(
scopeSet)
.build();
CompletableFuture<IAuthenticationResult> future = cca.acquireToken(clientCredentialParam);
return future.join().accessToken();
}
使用这种方法,我收到了一段时间后过期的令牌。 问题:
- 是否可以使用 MS Teams Bot 中的客户端凭据身份验证流程接收尚未过期的访问令牌(针对特定的tenantId)?
- 我应该使用 Bot Framework SDK 或 msal4j 库来实现客户端凭据身份验证流程吗?
- 客户端凭据身份验证流程需要 Azure 门户上的其他身份提供程序应用程序(Bot 应用程序除外)吗?
【问题讨论】:
-
我使用了 MSAL,它适用于我的客户端凭据流。此外,您可能还希望查看特定于 Teams BOT 的任何其他替代方法。
-
@Dev,您是否使用 MSAL 和客户端凭据流收到未过期的令牌?
标签: azure-active-directory botframework microsoft-teams microsoft-graph-teams msal.js