Day17 - 【概念篇】OAuth flows: Client Credentials

本系列文之後也会置於个人网站


     +---------+                                  +---------------+
     |         |                                  |               |
     |         |>--(A)- Client Authentication --->| Authorization |
     | Client  |                                  |     Server    |
     |         |<--(B)---- Access Token ---------<|               |
     |         |                                  |               |
     +---------+                                  +---------------+

                     Figure 6: Client Credentials Flow

尝试 Client Credentials flow

Client Credentials,这个模式有点特别。除了前面看到的它可能与其他模式并用以外,最特别的是,单纯使用它,完全不需要资源拥有者参予。总之先来看看:

你可以使用RESTfer尝试看看:

grant_type: client_credentials
client_id: oauth_tools
client_secret: <之前所产生的secret>


或是同样可以透过OAuth.Tools尝试看看。

与之前相同,OAuth.Tools可能无法与我们建立的授权服务器沟通,所以需要复制Curl的命令:

python -m json.tool <(curl -Ss -X POST http://localhost:8080/auth/realms/quick-start/protocol/openid-connect/token -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_id=oauth_tools&client_secret=7d087013-4059-4cdc-814c-e925c1596d24')

细看Client Credentials

你可以发现这次的返回值与隐含模式同样没有refresh_token。这是因爲在配置时client_secret应该只能由客户端拥有,不会送到浏览器参予前端通讯,且你会注意到在这次中同样不存在前端通讯,甚至不知道资源拥有者是谁(之前使用bob帐号登入)。

因爲按理client_secret只有客户端拥有,所以其实客户端可以随时取得access_token。就像是爲客户端建立一个系统帐号,client_id 就是帐号;而client_secret就是密码。

实际上也确实是如此,你可以在设定client的页面将Authorization EnabledService Accounts Enabled关闭。这麽一来就无法使用该模式了。


虽然之後还会提到JWT,但Client Credentials篇幅可能不会太多。所以先来使用JWT.io来看看access_token

在分析完access_token後,虽然重要的其实是sub,但preferred_username更可以看出这是一个特殊帐号:

另外可以透过 Service Account Roles 页签来设定该帐号所拥有的角色。按照设计,这有可能像是在「深入OAuth 2.0」所提到的 开发者权杖

参考资料


<<:  【後转前要多久】# Day17 BootStrap - 介绍、导入

>>:  让Python GUI 画面在最前方显示/ 最小化显示/ 隐藏桌面图示的方法

Day1-先来説说为什麽要介绍JDK的工具

前言 想参加铁人赛这件事情想了三年,总算在今年鼓起勇气报名参加了。 因为不擅长写文章,更别说要写技术...

xampp 多个网站 必须重启I-040GW 才可连上 浮动IP no-ip

各位前辈好 这个问题困扰我一年多了,真的找不到问题点所以提出 我的问题跟这位很像 我的原先设定是 使...

D05 - 准备前端环境

接下来开始建立前端专案,接下来依序介绍预期使用的工具与套件。 工具与套件 Vue、Vuex 图片来源...

Day 13 - .NET Core奇遇记

主导的第一个计画就是帮厂商开发一个平台并且包含3D模型模拟的功能,然後需要有一个後台给厂商能够上传图...

Flipper

在继续实作 domain layer 之前,我们会介绍一个方便日常开发的工具:Flipper。 An...