使用oauth2进行程序验证

时间:2019-07-17 09:11:13

标签: java authentication oauth oauth-2.0 meetup

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

对于此身份验证过程,我有些困惑。有没有一种方法可以使人通过OAuth进行编程身份验证?它说,在进行身份验证时,将要求用户登录,然后再继续进行身份验证,您如何仅通过代码实现登录?还是您需要先使用浏览器进行身份验证,然后使用访问令牌对来自应用程序的进一步请求进行身份验证。在这种情况下,OAuth2身份验证的典型过程是什么?

编辑:只有一个用户,这是我们的应用程序用来访问其数据的帐户。该用户最终已注册为API使用者。

1 个答案:

答案 0 :(得分:1)

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

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

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

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



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

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

令牌请求通常具有以下格式:

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

grant_type=client_credentials
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx 

但是有些人可能会选择强制执行另一种选择:在授权标头中传递客户端信息:

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

grant_type=client_credentials

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