是否可以在没有像ADAL这样的身份验证库的情况下从javascript调用AAD身份验证的Azure功能,而且无需向Microsoft注册客户端应用程序?
获取此错误:请求的资源上没有“Access-Control-Allow-Origin”标头。起源'
简单的Web客户端应用程序和azure函数都在同一个AAD下注册。两者都有azurewebsites.net域名。
我们可以拥有的最轻的网络客户端是什么?
答案 0 :(得分:0)
您收到的错误来自cross-origin resource sharing (CORS)支票。我怀疑从Web应用程序调用该函数时会发生这种情况。这个想法是浏览器首先发出OPTIONS请求,看看是否允许调用者(Web应用程序)在另一个域(函数应用程序)上调用资源。如果该批准,那么它将实际调用该函数。
所以,我们必须这样做,以便功能应用程序响应让浏览器知道允许调用。幸运的是,Functions具有内置的CORS功能。在门户网站中,为您的功能应用选择平台功能。在API部分下,您会看到 CORS 选项。添加功能应用的域名,然后点击保存。您应该看到Access-Control-Allow-Origin错误消失。
至于AAD,任何OpenID Connect客户端库都可以工作 - 但ADAL是一个很好的选择。但是,您可能仍需要创建客户端注册。
答案 1 :(得分:0)
在Azure AD中,使用常规OpenID Connect / OAuth流,您可以通过向/token
端点发出请求来获取令牌。但是,azure广告端点不支持CORS请求,因此进行AJAX调用以获取访问令牌是不可能的。相反,您可以在隐藏的iframe中使用the implicit flow来获取Web API的新令牌。有关详细信息,请参阅文档here和here。
是的,我建议您使用ADAL.JS,它可以帮助您更轻松地使用Azure AD来处理身份验证。