Spring-Security-OAuth2 中的 grant_type

Posted

技术标签:

【中文标题】Spring-Security-OAuth2 中的 grant_type【英文标题】:grant_type in Spring-Security-OAuth2 【发布时间】:2015-08-31 01:00:12 【问题描述】:

我是 OAuth2 概念的新手。我必须在我的应用程序中实现它。此应用程序提供 REST API。我遵循了一些教程,做了一些研究,并在我的应用程序中以工作状态实现了它。

但在进行一些搜索时,我读到了 OAuth2 中不同类型的 grant_type。我试图了解这一点,但没有得到实际的区别,我应该使用哪个来保护 REST API。 所以我想知道对于grant_type 类型“password”、“client_credential”等应该使用哪些以及在哪种情况下,或者应该使用哪些来保护 REST API?

另外在某些地方我发现/oauth/token 的请求是不同的。 某些地方 Authorization 标头以 Basic 'some_encoded_string' 给出。 在某个地方,它是 Bearer 'some_encoded_string'。这些请求有什么不同?

总结一下,我有 2 个问题 -

    对于grant_type 类型“password”、“client_credential”等,应该使用哪些以及在哪种情况下,或者应该使用哪些来保护 REST API?

    /oauth/token请求令牌的方式有什么区别。

启发我在实现 spring-security-oauth2 方面的知识。

【问题讨论】:

【参考方案1】:

您需要使用的授权取决于您的用例和访问您资源的客户端应用程序的性质。一般来说,没有适用于REST APIresource 的授权。您需要提供有关 API 是什么以及您如何与它们交互的更多信息。

如果用户必须授予客户端访问 API 的权限,那么您通常会使用“授权码”授权。如果客户端在没有最终用户干预的情况下直接访问资源,那么它通常会使用“客户端凭据”授权。

在大多数情况下,您应该避免使用password 授权,因为这意味着用户必须向客户端应用程序提供他们的用户名和密码。如果应用程序可以使用另一个授权,例如授权码,那么这是更可取的。受信任的应用程序(例如用户安装在其计算机上的本机应用程序)将是可能使用密码授权的一种情况。

客户端通常会使用“基本”身份验证来访问令牌端点。 “不记名”身份验证用于访问受保护的资源(例如您的 API),传递从授权服务器获得的访问令牌。

您认为为什么需要使用 OAuth2?我很好奇,因为您说您不了解赠款类型的用途。在判断如何使用 OAuth2 或为什么使用 OAuth2 之前,您确实需要了解这一点。

【讨论】:

项目需要它所以我使用的是 OAuth2,是的,我不明白它的概念,但这并不意味着我永远不会明白这一点。 您说password在大多数情况下不应该使用授权类型,但您没有解释在什么情况下我们应该使用该授权类型?您还可以解释一下带有基本类型授权标头的令牌请求吗? 我在密码授权方面添加了更多内容。如果没有更多关于为什么你的应用程序需要 OAuth2 的信息,很难给出关于你应该使用什么的具体答案(或者它是否有意义)。令牌请求等的所有细节都在spec 中介绍,所以我建议你去那里看看细节。

以上是关于Spring-Security-OAuth2 中的 grant_type的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Security-OAuth2 中的 grant_type

如何在 spring-security-oauth2 中的资源服务器中获取自定义 UserDetailService 对象?

spring-security-oauth2注解详解

spring-security-oauth2注解详解

spring-security-oauth中的JdbcApprovalStore(ApprovalStore)有啥用?

spring-security-oauth2 中优雅的扩展自定义(短信验证码)登录方式【Part-0】