我有一个HTTP触发的Azure函数,该函数由我的一个Web应用程序使用。该站点的用户将是注册该站点的任何人。现在,我想以一种仅对注册用户进行身份验证的方式来实现对azure功能的身份验证。我可以看到许多内置身份验证,例如azure函数,使用Azure AD和其他身份提供程序的OAuth等。我正在寻找一种方法来对通过我的网站而非身份提供程序注册的用户进行身份验证。
我能想到的一种解决方案是,在将该用户注册到Azure AD时进行注册。然后,在调用API时,将用户凭据传递给API并针对AD进行验证。有人可以建议这是一个好的解决方案吗?如果没有,请为我的用例提供最佳解决方案。
我不想使用任何外部身份验证提供程序
答案 0 :(得分:1)
我认为您可以通过以下方式做到这一点。
使用功能级别授权密钥(不是首选,但很容易)
如果您的Web应用程序是唯一将访问该功能应用程序的应用程序,则可以直接在该功能上启用授权。任何想要访问该功能的人都必须传递密钥,否则您将获得401。由于您希望用户直接访问功能,因此必须在网站中创建附加端点,该端点将代表用户调用功能应用并传递密钥。您可以在这里找到更多信息 Authorization Key
使用Azure B2C或AD
您正在考虑正确的路线。如果您的网站可供外部消费者访问,则可以考虑使用Azure B2C。您可以获得许多现成的功能,包括使用社交登录名进行注册,并且可能不需要单独保存用户。流程保持不变,用户通过Azure AD(或B2C)进行身份验证并颁发令牌。然后在调用Azure函数时传递令牌。
答案 1 :(得分:1)
只需参考文档:
Azure functions HTTP Trigger - Authorization keys
尽管键可能有助于在开发过程中混淆HTTP端点,但它们并不是用来保护生产中HTTP触发器的一种方法。要了解更多信息,请参阅Secure an HTTP endpoint in production。
第二个链接Secure an HTTP endpoint in production提供有关如何保护HTTP触发功能的更多见解:
要在生产中完全保护功能端点,应考虑实现以下功能应用程序级安全选项之一:
- 为功能应用程序打开“应用程序服务身份验证/授权”。 App Service平台允许使用Azure Active Directory(AAD)和多个第三方身份提供程序来对客户端进行身份验证。您可以使用它来实现功能的自定义授权规则,并且可以使用功能代码中的用户信息。要了解更多信息,请参阅Authentication and authorization in Azure App Service and Working with client identities。
- 使用Azure API管理(APIM)对请求进行身份验证。 APIM为传入请求提供了多种API安全选项。要了解更多信息,请参见API Management authentication policies。使用APIM后,您可以将功能应用程序配置为仅接受来自APIM实例的IP地址的请求。要了解更多信息,请参阅IP address restrictions。
- 将功能应用程序部署到Azure应用程序服务环境(ASE)。 ASE提供了专用的托管环境,可在其中运行您的功能。 ASE使您可以配置单个前端网关,该网关可用于验证所有传入请求。有关更多信息,请参见Configuring a Web Application Firewall (WAF) for App Service Environment。