我在同一目录中有两个Azure AD应用程序,让我们称它们为FrontendAuth
和BackendAuth
,它们分别为ASP.NET MVC前端和Web API后端提供身份验证。 MVC前端使用标准UseOpenIdConnectAuthentication
配置进行保护,Web API后端使用UseWindowsAzureActiveDirectoryBearerAuthentication
。
我想要做的是登录前端,针对FrontendAuth
进行身份验证,然后通过JavaScript使用ADAL JS
获取的令牌{{1}来消费后端中托管的API }。
假设
我的期望/假设是:
BackendAuth
才能访问经典门户网站中的FrontendAuth
BackendAuth
设置为oauth2AllowImplicitFlow
true
时,我应该将ADAL JS
设为clientId
FrontendAuth
配置的endpoints
对象应包含后端API的Url和客户端ID ADAL JS
结果
我可以实现登录前端并通过BackendAuth
与后端服务进行通信的目标:
ADAL JS
应用程序根本无法访问FrontendAuth
BackendAuth
属性设置为oauth2AllowImplicitFlow
true
将ADAL JS
设置为clientId
BackendAuth
ADAL JS
配置的端点对象未设置问题
根据这些调查结果,我想了解以下内容:
ADAL JS
的目的吗?答案 0 :(得分:0)
您在这里混合了两个OAuth2流(authorization code flow和implicit flow)。两者都旨在向客户端应用程序发出令牌。 auth代码流用于在服务器上运行的Web应用程序(如MVC应用程序),隐式流程适用于SPA等公共客户端。
使用OpenID Connect使用混合流程将用户登录到MVC应用程序时,您会从浏览器收到授权代码。您可以使用此代码与授权服务器通信并获取JWT令牌,然后将其存储在cookie会话中。您可以使用相同的代码为BackendAuth应用程序获取JWT令牌,只要您已授予FrontendAuth应用程序调用BackendAuth应用程序的权限。
如果要在用户的浏览器中启用JavaScript以调用BackendAuth应用程序,则需要以某种方式将访问令牌传递给浏览器。您可以通过将令牌与初始请求一起发送并将其放在本地存储中或公开(安全)MVC路由来获取令牌来完成此操作。
有关我在此处描述的示例,请参阅this Azure AD sample,它使用授权代码获取Graph API的令牌。
ADAL.js实现隐式流,适用于SPA等JavaScript应用程序。
答案 1 :(得分:0)
听起来您没有使用[Authorize]属性(在类级别或操作级别)显式修饰Web API控制器。因此,您的Web API可能乐意为请求它的任何人提供内容。