我是 OAuth2 概念的新手。我必须在我的应用程序中实现它。该应用程序提供 REST API。我遵循了一些教程,做了一些研究,并在我的应用程序中以工作状态实现了它。
但是在进行一些搜索时,我读到了 OAuth2 中不同类型的 grant_type
。我试图了解这一点,但没有得到实际的差异以及我应该使用哪个来保护 REST API。
所以我想知道对于 grant_type
类型“password”、“client_credential”等应该使用哪些以及在哪种情况下使用,或者应该使用哪些来保护 REST API?
另外,在某些地方我发现对 /oauth/token
的请求是不同的。
有些地方的 Authorization
header 被指定为 Basic 'some_encoded_string'
。
在某些地方它是承载“some_encoded_string”。这些请求有什么区别?
总结一下我有两个问题 -
对于
grant_type
类型“password”、“client_credential”等,应该使用哪些类型以及在哪种情况下使用,或者应该使用哪些类型来保护 REST API?从
/oauth/token
请求token的方式有什么不同。
启发我实现 spring-security-oauth2 的知识。
最佳答案
您需要使用的授权取决于您的用例以及访问您的资源的客户端应用程序的性质。一般来说,没有应用REST API
资源的拨款。您需要提供有关 API 是什么以及如何与它们交互的更多信息。
如果用户必须授予客户端访问 API 的权限,那么您通常会使用“授权代码”授予。如果客户端直接访问资源而无需最终用户的干预,那么它通常会使用“客户端凭据”授予。
在大多数情况下,您应该避免使用password
授权,因为这意味着用户必须向客户端应用程序提供其用户名和密码。如果应用程序可以使用其他授权,例如授权码,那么这是更好的选择。受信任的应用程序(例如用户在其计算机上安装的 native 应用程序)是可能使用密码授予的一种情况。
客户端通常会使用“基本”身份验证来访问 token 端点。 “承载”身份验证用于访问 protected 资源(例如您的 API),传递从授权服务器获取的访问 token 。
您认为为什么需要使用 OAuth2?我很好奇,因为你说你不明白补助金类型的用途。在判断如何使用 OAuth2 或为什么使用 OAuth2 之前,您确实需要了解这一点。
关于java - Spring-Security-OAuth2 中的 grant_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30846746/