.Net Core WebApi OAuth2授权类型

时间:2020-10-06 08:44:05

标签: c# .net-core oauth-2.0 webapi

我一直在尝试阅读OAUTH2,因为我已经开发了要保护的API。 我已经尝试过使用JWT令牌,但想为OAuth2实现创建原型。我遇到的问题(除了身份验证与授权之外)是grant_types。 我的API将以多种不同方式使用

  • 内部应用程序(取决于用例的集成控制台应用程序和基于Web /桌面的应用程序)。
  • 外部应用程序(Web和桌面/本机应用程序)。

最初,我想到了使用Client_Credentials。这里的问题是,它非常适合与我的API集成以进行迁移的应用程序,但是在想要提供细粒度的角色/权限级别访问权限时却无法保留用户的身份。

然后我想到了使用授权码,从用户的角度来看,这将非常有用-并启用单点登录-但由于无法应对身份验证重定向而会终止集成(这些应用很可能是在服务器上运行的服务) )。

我的最后一个选择似乎是资源所有者密码凭据,该凭据在两种情况下均能正常工作,但在我读过的许多帖子中似乎都不用了,并且被认为是一个严重的安全漏洞。

我曾考虑过拆分api,但我更希望使用一个网关。 另一个考虑因素可能是更改每个客户的授予类型,以便对集成和用户进行不同的对待,但我不确定。

我们将不胜感激这个美妙社区提供的任何帮助或建议。谢谢。

1 个答案:

答案 0 :(得分:1)

最好将系统设置为接受client_credentialAuthorization Code (with PKCE)流。

client_credentials将在系统登录时使用。

Authorization Code (with PKCE)(针对用户)。

您可以将范围/声明/组或其他属性添加到令牌中,以授予对该资源的访问权限。

如果正确设置,则两种机制都将相同。


Resource Owner Password Credentials是过时的流程,建议不要使用。

Auth0所述:

尽管我们不建议这样做,但高度受信任的应用程序可以使用“资源所有者密码流”,该流通常要求用户使用交互形式提供凭据(用户名和密码)。