0

我正在尝试编写一个时间触发并每 10 分钟运行一次的 Azure 函数。

该函数需要调用一个需要不记名令牌的 API。

如何生成令牌?由于它是基于时间的,我不能让用户通过登录 MS Identity 平台来登录并提供功能授权令牌,该平台可用于获取访问令牌。

4

2 回答 2

0

您可以使用密码授权流程,但这需要您向应用程序提供用户名和密码。更好的方法是使用设备代码流在应用程序之外进行身份验证。

有关示例,请参见此 repo:

https://github.com/blueboxes/devicecodesample

于 2021-01-20T10:15:34.547 回答
0

您只需要在计时器触发函数中通过以下代码获取令牌:

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();
于 2020-04-13T09:02:11.300 回答