繁体   English   中英

使用 oauth2 进行编程身份验证

[英]Programmatic authentication with oauth2

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

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

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

您混淆了不同的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. 标头为“授权:承载”的服务请求
  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是函数,而不是文字字符串。

我对这个问题和 Turtle 的回答都投了赞成票。 我认为任何像我一样查过这个问题的人也会受益于:

https://auth0.com/docs/authorization/flows/which-oauth-2-0-flow-should-i-use

有不同的流量。 在编写代码之前在方框/握手图中考虑它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM