c# - .Net Core WebApi OAuth2 授权类型
问题描述
我一直在尝试阅读 OAUTH2,因为我已经开发了一个我希望保护的 API。我已经尝试过使用JWT
令牌,但想对 OAuth2 实现进行原型设计。我遇到的问题(除了身份验证与授权)是grant_types。我的 API 将以多种不同的方式使用
- 内部应用程序(用于集成的控制台应用程序和基于 Web/桌面的应用程序,具体取决于用例)。
- 外部应用程序(Web 和桌面/本机应用程序)。
最初我想使用 Client_Credentials。这里的问题是它适用于与我的 API 集成以进行迁移的应用程序,但在想要提供细粒度的角色/权限级别访问时不保留用户的身份。
然后我考虑使用授权代码,这从用户的角度来看会很棒 - 并启用单点登录 - 但会杀死集成,因为它们无法应对身份验证重定向(应用程序可能是在服务器上运行的服务)。
我的最后一个选项似乎是资源所有者密码凭据,它在这两种情况下都可以很好地工作,但在我读过的许多帖子中似乎不受欢迎,并且被认为是一个严重的安全漏洞。
我考虑过拆分 api,但我更喜欢单个网关。另一个考虑因素可能是更改每个客户端的授权类型,以便对集成和用户进行不同的处理,但我不确定。
这个美妙的社区可以提供的任何帮助或建议将不胜感激。谢谢。
解决方案
最好将您的系统设置为同时接受client_credential
和Authorization Code (with PKCE)
流。
client_credentials
系统登录时使用。
Authorization Code (with PKCE)
为用户。
您可以将范围/声明/组或其他属性添加到令牌以授予对资源的访问权限。
如果设置正确,两种机制的工作方式相同。
Resource Owner Password Credentials
是过时的流程,建议不要使用。
正如Auth0所说:
尽管我们不建议这样做,但高度信任的应用程序可以使用资源所有者密码流程,该流程要求用户提供凭据(用户名和密码),通常使用交互式表单。
推荐阅读
- php - 在重新路由到 HTTPS 时删除 URL 末尾的 .html
- json - 基于 JSON 字符串子项的过滤列表
- swift - SwiftUI:如何使用 NavigationViews 切换到新的导航堆栈
- prolog - 在 prolog 中使用 not fact(something) 时出现控制错误
- mysql - MySQL:根据账单日期过去多少天显示汇总会费
- python - 计算在 Python 中导致错误的方法数
- php - 子集合操作
- python - 使用 selenium 批量执行 python 脚本(selenium 错误)
- fortran - 返回许多值的索引函数
- python - Flask-Sqlalchemy:具有 3 个主键的表,它们也是外键