我领导着一个由天蓝色函数开发人员组成的大型团队。因此,微软引用的大多数使用 azure Web 界面的示例对我来说不起作用。我正在使用模拟器在本地开发Azure功能以节省一些成本。我通过 Visual Studio 将所有功能发布到我的集成环境中。
我正在开发一堆需要 api 网关的 azure 函数来使用 Azure AD B2C 处理身份验证工作流。现在,没有可以在本地运行的 api 网关模拟器或 Azure AD B2C 模拟器。我的身份验证工作流程包括拦截对 api 的请求,将它们重定向到 AD B2C 进行身份验证,然后将身份验证令牌添加到 http 标头,然后调用 http 触发的 azure 函数。
现在的问题是,如何测试身份验证工作流程?
如何设置 api 网关以将在 Visual Studio 中本地运行的函数注册为云中 api 网关的 api 端点?
如果您正在开发使用 Azure-AD 或 Azure B2C 的 SPA,这里是另一种选择轻松认证 https://learn.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad?toc=%2Fazure%2Fazure-functions%2Ftoc.json#-configure-with-express-settings,这将为您执行 JWT 令牌验证,并让您执行以下操作:
即使在本地,您的 SPA 也会获得令牌,因此请执行以下操作:
- 注入索赔本金 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#working-with-client-identities进入你的函数
- 检查用户是否经过身份验证(例如,principal.Identity.IsAuthenticated),如果没有,则返回 UnauthorizedResult。
- 检查发行人索赔。如果委托人有一个,它会通过 Express Auth。您的 JWT 令牌已通过它的验证,您可以立即从中获取您的声明。
- 如果没有发行者,则属于本地开发,您可以转到标头并自行拉出 JWT 令牌并获取您的声明。您还可以将其 IFDEF 用于条件构建,以便您双重确定它是本地开发。
以下是从标头中提取 JWT 令牌的一些示例代码(HttpRequest 被注入到每个函数中):
private JwtSecurityToken ReadJwtTokenFromHeader(HttpRequest req)
{
if (req.Headers.ContainsKey("Authorization"))
{
var authHeader = req.Headers["Authorization"];
var headerValue = AuthenticationHeaderValue.Parse(authHeader);
var handler = new JwtSecurityTokenHandler();
return handler.ReadJwtToken(headerValue.Parameter);
}
return null;
}
注意:这需要 System.IdentityModel.Tokens.Jwt NuGet 包才能使用 JwtSecurityTokenHandler。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)