Authentication 使用oauth 2.o c从azure函数调用web api#

Authentication 使用oauth 2.o c从azure函数调用web api#,authentication,azure-functions,Authentication,Azure Functions,我试图调用一个web api,使用Azure函数返回客户数据。 如何存储客户端凭据并请求访问令牌?我应该在一个函数下组合授权和调用api,还是将其分开 请提供任何示例代码/文档以提供帮助。您可以将客户端凭据存储在Azure KeyVault中,并链接到您的Azure功能,因为这取决于您的流量 如果您愿意进行编排,可以从名为“GetToken”的ActivityTrigger函数返回令牌,如下所示 [FunctionName(“GetToken”)] 公共异步任务GetToken( [Acti

我试图调用一个web api,使用Azure函数返回客户数据。 如何存储客户端凭据并请求访问令牌?我应该在一个函数下组合授权和调用api,还是将其分开


请提供任何示例代码/文档以提供帮助。

您可以将客户端凭据存储在Azure KeyVault中,并链接到您的Azure功能,因为这取决于您的流量

  • 如果您愿意进行编排,可以从名为“GetToken”的ActivityTrigger函数返回令牌,如下所示
[FunctionName(“GetToken”)]
公共异步任务GetToken(
[ActivityTrigger]IDurableActivityContext(上下文)
{
}
var token=await context.CallActivityAsync(“GetToken”,null);
  • 如果只有一个函数,那么可以在某个助手类中使用GetToken代码并调用它

将客户端凭据存储在密钥保管库中

如果您偶尔调用WebAPI一次(比如每小时调用一次),那么可以使用Keyvault中的凭据调用oAuth端点。但是如果您经常调用webAPI,比如说一分钟多次或多次,那么您将多次轰炸oAuth端点以获取令牌。这不是最佳做法

有关于此的Microsoft官方文档

文档中说要有一个时间触发函数,从Keyvault中提取令牌并加密,然后将其存储在DB、cosmos或任何存储器中。频率应小于令牌到期时间(如果令牌到期时间为2小时,则每1小时45分钟安排一次作业)。 然后,当您需要令牌时,拿起它,解密它并将其用于您的呼叫。 这对于您的用例来说应该很好

    [FunctionName("GetToken")]
    public async Task<string> GetToken(
    [ActivityTrigger] IDurableActivityContext context)
    {
    }
    
    var token = await context.CallActivityAsync<string>("GetToken", null);