我正在尝试编写一个时间触发并每 10 分钟运行一次的 Azure 函数。
该函数需要调用一个需要不记名令牌的 API。
如何生成令牌?由于它是基于时间的,我不能让用户通过登录 MS Identity 平台来登录并提供功能授权令牌,该平台可用于获取访问令牌。
我正在尝试编写一个时间触发并每 10 分钟运行一次的 Azure 函数。
该函数需要调用一个需要不记名令牌的 API。
如何生成令牌?由于它是基于时间的,我不能让用户通过登录 MS Identity 平台来登录并提供功能授权令牌,该平台可用于获取访问令牌。
您可以使用密码授权流程,但这需要您向应用程序提供用户名和密码。更好的方法是使用设备代码流在应用程序之外进行身份验证。
有关示例,请参见此 repo:
您只需要在计时器触发函数中通过以下代码获取令牌:
HttpClient client = new HttpClient();
var values = new Dictionary<string, string>
{
{ "client_id", "<your app client id>" },
{ "scope", "<scope>" },
{ "username", "<your user name>" },
{ "password", "<your password>" },
{ "grant_type", "password" },
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://login.microsoftonline.com/<your tenant id>/oauth2/v2.0/token", content);
var responseString = await response.Content.ReadAsStringAsync();
然后你需要解析responseString
(json类型)并使用其中的访问令牌来请求你的api。
更新:
HttpClient client = new HttpClient();
var values = new Dictionary<string, string>
{
{ "client_id", "<your app client id>" },
{ "scope", "<scope>" },
{ "client_secret", "<your app client secret>" },
{ "grant_type", "client_credentials" },
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://login.microsoftonline.com/<your tenant id>/oauth2/v2.0/token", content);
var responseString = await response.Content.ReadAsStringAsync();