【问题标题】:Azure AD implementation for SPA / WebAPI application having both on the port/HostEnv.?SPA / WebAPI 应用程序的 Azure AD 实现在端口/HostEnv 上都有。?
【发布时间】:2017-08-09 02:14:53
【问题描述】:

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

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

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

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

我主要担心的是,如果我尝试使用邮递员之类的工具直接调用 WebAPI,我会收到拒绝访问/未经授权的访问 (401)。有人可以解释我如何在我的本地环境中进行测试。有这种情况吗?

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

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

【问题讨论】:

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


    【解决方案1】:

    所有 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 不提供任何弹出 UX 的机会,因此您可以遵循的一种策略是预先获取所需的令牌. 使用 OWIN 可以让您集中进行身份验证设置;如果在控制器中添加身份验证,则需要为添加的每个新控制器重复该逻辑。此外,维护代码会更加困难,因为您可能会使用更新程序集时需要更改代码的 API 界面,而如果您使用标准中间件设置,则不太可能发生这种情况

    【讨论】:

    • 感谢@Vittorio 提供您的建议。然而,我想带来一个测试场景,在这个应用程序中,当我通过邮递员/提琴手(来自 ui 应用程序的令牌值在标头的 Authentication 属性中发送)调用 web api 并进行调用时,到控制器(用 [Authorize] 属性装饰),我可以对用户进行身份验证吗?我正在尝试,但仍然收到未经授权的错误。如果您需要该项目的任何示例代码,请告诉我。
    • 只要令牌有效(例如,看起来与您通过应用程序中的正常流程获得的完全一样),这应该可以工作。控制器无法知道您的请求是来自邮递员还是来自任何其他客户端(用户代理不起作用)
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2017-02-11
    • 2017-01-16
    • 2023-03-09
    • 2020-05-29
    • 2021-06-13
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多