azure - 允许第 3 方客户端 Web 应用程序(不是用户)以及我自己的 Web 客户端应用程序访问我的 Web api 的最佳方式是什么?
问题描述
我一直在研究为新项目执行 AuthN 和 AuthZ 的最佳方法,但没有发现任何似乎适合该项目要求的东西。
我有一个 .net 核心 API 项目,最初只能由我的 Razor Pages Web 应用程序(单独的项目)访问。
在不久的将来,我需要使 API 也可供 3rd 方应用程序访问(因此,如果用户登录到这个 3rd 方应用程序,他可以自动访问我的 API,而无需再次输入 UN/PW - 这很可能需要来自第 3 方团队的一些开发)。
我希望我的 Razor Pages Web 应用程序中的用户和第 3 方应用程序中的用户具有不同的角色(出于授权目的)。
API 和 Razor Pages 应用程序将在 Azure 中运行。
我想知道是否有一种可以在 API 端使用的解决方案来处理来自我的 Razor 页面的请求(优先使用从 B2C 身份验证过程中检索到的令牌)和来自其他第 3 方应用程序的请求。
我曾考虑生成唯一的 JWT,将其发送到 3rd 方应用程序以及我的 Razor Pages Web 应用程序,并在 API 端使用 .net 核心 jwtBearer 身份验证设置来允许身份验证/授权(可能会将用户角色信息发送为索赔)。
这似乎不是一个好的解决方案,因为这些 JWT 值将被硬编码并且不会被更新。
请让我知道您认为什么是好的解决方案。
谢谢你。
解决方案
您可能需要考虑提供开箱即用身份验证的 Azure AD。Azure AD 可用于端到端保护。你只需要通过 Azure AD 保护你的 Web API,任何需要访问你的 API 的客户端都必须通过 Azure AD 的身份验证,并且将获得一个令牌来访问你的 WebAPI。https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-auth-aad。要管理授权,您可以考虑角色https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims
推荐阅读
- datatable - Yii2 Basic:index.php 中的分页代码在哪里?
- c++ - 如何通过 CNG 使用 RSA 私钥签名
- spring - spring rest doc - 服务层模拟
- gradle - 如何在单个构建中将一个 Gradle 子项目生成的 jar 复制到另一个中
- asp.net - Href to go to another page and load ajax on that page
- node.js - Sequelize 不记录 sql 查询
- java - 如何为所有 OneToMany 实体设置值?
- dialogflow-es - 如何在 Fulfillment 中使用列表参数
- r - 给定一个列名向量,如何检查它们是否都是数字?
- typescript - 为了保证类型安全,“as const”断言是这里唯一的解决方案吗?