SPA / WebAPI应用程序的Azure AD实现同时具有端口/ HostEnv。?

时间:2017-08-08 08:23:00

标签: angularjs azure asp.net-web-api azure-active-directory

我正在尝试在SPA应用程序中实现Azure AD身份验证。 我在WEB API中使用OWIN Startup.cs文件,在angularjs前端应用程序中使用ADAL.js文件。 (根据大部分教程建议)

我的应用程序没有托管在不同域/端口中的WebAPI和UI。基本上,Web应用程序项目中引用了WebAPI。 (所以不需要启用CORS)。

现在,我已分别在Azure AD上注册了应用程序。 即ClientApp - >回复网址:http://localhost:90/和      WebAPI - > APPID登录网址:http://localhost:90/Api/V1/

我在尝试从UI访问应用程序时配置了ADAL.js并获取了登录页面。此外,我能够检索登录URL重定向后生成的id.token。还使用[Authorize]属性修饰了web api控制器。

我主要担心的是,如果我尝试使用postman这样的工具直接调用WebAPI,我将获得访问被拒绝/未授权访问(401)。有人可以解释我如何测试我的本地环境。有这种情况吗?

我的示例请求是:http://localhost:93/Api/V1/User/Preference(GET) 我在web api调用中的Headers的Authroization属性中添加了令牌。

另外请注意,我认为我不需要OWIN / Startup.cs文件来保护WebAPI。我尝试的方式是我通过标头发送令牌值,并使用JwtSecurityToken获取AudienceID并解析Authroization属性的内容。这种方法是否符合安全性,或者我应该坚持使用OWIN。

1 个答案:

答案 0 :(得分:0)

所有ADAL JS教程都将后端API和UX托管在同一个域和端口上,而不需要CORS。请参阅示例https://azure.microsoft.com/en-us/resources/samples/active-directory-javascript-singlepageapp-dotnet-webapi/。这些示例表明您只需要一个Azure AD注册,因为JS层实际上是与Web API完全相同的应用程序。 我们确实有一些示例演示如何调用外部API,这些样本确实需要CORS-但仅适用于额外的API。调用应用程序后端的逻辑保持不变(只有一个Azure AD应用程序注册,不需要CORS).Postman没有提供任何弹出用户体验的机会,因此您可以遵循的一个策略是获取令牌需要事先。 使用OWIN可以集中验证设置;如果在控制器中添加auth,则需要为添加的每个新控制器重复该逻辑。此外,维护代码将更加困难,因为您可能会在更新程序集时使用需要更改代码的API表面,而如果使用标准中间件设置则不太可能发生