java - 使用 oauth2 的程序化身份验证

标签 java authentication oauth oauth-2.0 meetup

我们已经使用一些组织的 API 一段时间了,但现在他们开始使用 OAuth2 进行身份验证。他们的 API 完全由我们的应用程序以编程方式使用。所以现在我们必须使用 OAuth2 进行身份验证,以便我们可以再次使用他们的 API。

我对这个身份验证过程有点困惑。有没有一种方法可以通过编程方式使用 OAuth 进行身份验证?它说,在继续进行身份验证之前,将要求用户进行身份验证时登录,如何仅通过代码实现这种登录?或者您是否需要先使用浏览器进行身份验证,然后使用访问 token 来处理来自应用程序的进一步请求。这种场景下OAuth2认证的典型流程是什么?

编辑:只有一个用户是我们的应用程序用于访问其数据的帐户。该用户在其端注册为 API 的使用者。

最佳答案

您混淆了不同的 OAuth 流程。用户进行身份验证的流程通常是 authorization_code 流程,而您要使用的流程应该是 client_credentials 流程。

我们将您的应用程序称为“A”,将您使用其服务的组织称为“B”。

在client_credentials流程中,A将他的client_id和client_secret发送给B的授权服务器。该服务器将返回一个访问 token ,您现在可以使用它来调用 B 的资源服务器(服务本身)。

+---------------+          +------------------+
| Application A |    1     | Authorization    |
|               +----------+ serveur          |
+---------------+    2     +------------------+



+---------------+          +------------------+
| Application A |    3     |Resource Server   |
|               +----------+                  |
+---------------+    4     +------------------+

  1. 带有 client_id 和 client_secret 的 token 请求
  2. token 响应:带有 access_token 的 json
  3. 标题为“Authorization: Bearer”的服务请求
  4. 照常服务响应。

token 请求通常采用以下格式:

POST /token HTTP/1.1
Host: authorization-server.com

grant_type=client_credentials
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx 

但有些人可能会选择强制执行其他选项:在授权 header 中传递客户端信息:

POST /token HTTP/1.1
Host: authorization-server.com
Authorization: Basic base64(client_id:client_secret)

grant_type=client_credentials

Base64 在这里是函数,而不是文字字符串。

关于java - 使用 oauth2 的程序化身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072374/

相关文章:

php - 使用SQL检查数据库中是否存在用户

ios - 无法从 iOS OAuth1.0、OAConsumer 客户端在 tumblr 上发帖

r - R的OAuth访问

php - Eloquent-oauth-捕获PDO异常

django - Django,phpBB和MediaWiki统一登录

java - 无法将上传的文件保存到特定目录

java - 第一个参数类型错误。找到 : 'com.example.sunshine.FetchData' , 需要: 'android.content.Context'

java - SFTP使用java从Windows服务器检索文件到Linux服务器

Laravel 8 Sanctum SPA Auth - 未按要求设置 session 存储

java - Payara Micro - 部署后 404