Azure active directory 如何为非交互式/守护程序应用程序获取Azure B2C承载令牌,并在Azure HTTP触发函数中对其进行验证

Azure active directory 如何为非交互式/守护程序应用程序获取Azure B2C承载令牌,并在Azure HTTP触发函数中对其进行验证,azure-active-directory,jwt,azure-ad-b2c,msal,Azure Active Directory,Jwt,Azure Ad B2c,Msal,有一个正在开发的C#应用程序应该是一个更大的后端应用程序的一部分,用于处理一些数据。此应用程序应该从Azure AD B2C获取令牌,并将其发送到HTTP触发函数,在该函数中,应该通过以下代码进行验证: var configManager=new ConfigurationManager( $“{u authenticationSettings.Authority}/.well-known/openid配置”, 新的OpenIdConnectConfigurationRetriever());

有一个正在开发的C#应用程序应该是一个更大的后端应用程序的一部分,用于处理一些数据。此应用程序应该从Azure AD B2C获取令牌,并将其发送到HTTP触发函数,在该函数中,应该通过以下代码进行验证:

var configManager=new ConfigurationManager(
$“{u authenticationSettings.Authority}/.well-known/openid配置”,
新的OpenIdConnectConfigurationRetriever());
var config=await configManager.GetConfigurationAsync();
_validationParameters=新令牌validationParameters
{
IssuerSigningKeys=config.SigningKeys,
ValidateAudience=true,
//访问群体必须是应用程序ID又名clientId
Validudience=\u authenticationSettings.ClientId,
validateisuer=true,
ValidIssuer=config.Issuer,
ValidateLifetime=true
};
var tokenHandler=new JwtSecurityTokenHandler();
var result=tokenHandler.ValidateToken(authHeader.Parameter,_validationParameters,out var jwtToken);
首先,我们认为使用MSAL从Microsoft Graph API获取访问令牌会对我们有所帮助,但是上面的C#代码抛出了一个无效的签名异常,我们发现这是有意义的,因为。显然,我们需要在应用程序中获取一个
id\u令牌
,并将其发送给HTTP触发函数,以便通过上面的代码片段进行验证


应用程序无法获取
id\u令牌
,因为它不应该启动Azure AD B2C的登录UI以让用户登录并通过URL重定向它。这个问题的解决方案是什么,这样应用程序就可以在没有UI的情况下获取令牌,并将其发送到http触发函数进行验证?

为没有UI的AAD B2C租户获取令牌有两种方法,您可能应该选择一种,具体取决于您想要实现的目标:

  • 用户令牌-通过使用资源所有者密码凭据流-。但是,此流已被弃用,并且通常在遗留应用程序上下文中提到
  • 服务器端应用程序令牌-通过使用客户端信任流-另一方面,这需要使用特定于AAD的请求,但AAD B2C租户-

  • 我也不太清楚你为什么要使用id_代币。如果应用程序需要使用令牌将请求授权给函数,则无论如何检索令牌(交互式UI或非交互式UI),该请求都应为访问令牌。

    我可以使用id_令牌放弃。我在Azure函数中找不到验证令牌的示例。示例中的客户端应用程序是Web Api。有什么指示吗?