大部分的应用都需要对用户的业务访问进行身份认证,以便为用户提供个性化体验。但是端到端完整构建一套用户认证系统会面临很多挑战。认证服务可以为应用快速构建安全可靠的用户认证系统,开发者只需在应用中访问认证服务的相关能力,而不需要关心云侧的设施和实现。最近AGConnect推出了全新的统一登陆方式进行认证,不需要开发者自己接入华为账号,微信,微博等第三方帐号系统,认证服务的SDK就可以自动帮开发者进行接入。除了端侧的认证方式接入外,认证服务还提供了服务器侧的一些功能,包括了导入导出用户列表,验证和撤销用户凭证等操作。由于之前只提供了Java的SDK,对其他语言的服务器开发者并不友好,所以认证服务推出了服务器侧的Rest api,这样可以满足大部分开发语言。下面就来教大家如何调用这些Rest api。
1、获取调用Token
在调用认证服务Rest api之前,我们需要先获取调用api的token,在调用时传入进行鉴权。在获取token之前,我们首先需要在AGConnect的管理台上创建该应用的client。登录AGConnect管理台,进入“用户与访问”,选择Connect api。点击创建新建一个client,并选择项目为您的项目,角色选择为管理员。
创建成功后可以看到新建的client的clientid与client secret:
下面就可以开始接口的调用了,请求如下
POST /api/oauth2/v1/token HTTP/1.1
Host: connect-api.cloud.huawei.com
Content-Type: application/json
Content-Length: 168{"grant_type":"client_credentials","client_id":"625298440531751552","client_secret":"B17337A39E83AA98982FA08768BDF8C6B727F6CE5987988E87FBE6180FA62B43"
}
我们只需要将clientid,client secret和granttype按照json格式传入body即可
请求后获取返回:
我们将返回的token记录下来,后续接口使用。
2、导入用户
对于第一次使用认证服务的应用,如果想将之前所有的用户信息都导入AGConnect的
认证服务中,就可以通过此接口进行操作:
在Header中放入clientid,项目所在的productid与刚刚获取的token,然后将用户信息按照特定的格式传入:
POST /api/auth-service/v1/server/user:import HTTP/1.1
Host: connect-api.cloud.huawei.com
client_id: 625298440531751552
productId: 736430079244583900
Authorization: Bearer eyJraWQiOiJ6MktUWkdvbW1kTEZNRUtEVnUzRk5uaDJiSWtRWml5ZyIsInR5cCI6IkpXVCIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiI2MjUyOTg0NDA1MzE3NTE1NTIiLCJkbiI6MiwiY2xpZW50X3R5cGUiOjEsImV4cCI6MTYzMDYzNTM3MywiaWF0IjoxNjMwNDYyNTczfQ.B4QEorxD9Ps7Rt91LHQdxWRX208ql63ZFVg3TCaX3J8
Content-Type: application/json
Content-Length: 561{ "users": [{ "importUid": "99038248123456789", "displayName": "HelloWorld", "photoUrl": "https://developer.huawei.com/consumer/xxx.png", "email": "xxxx@huawei.com", "emailVerified": true, "phone": "+86-18260099999", "createTime": "1627027017000", "lastLoginTime": "1627027017000", "providers": [{ "provider": "11", "providerUid": "9903824860586577777", "photoUrl": "https://weixin.qq.com/xxx.png", "displayName": "HelloWorld", "openId": "123456" } ] } ]
}
在返回中我们可以看到有哪些用户是成功导入的:
3、导出用户
我们还可以通过接口将认证服务中的用户全部导出。
Header部分和导入用户一致,在body中我们需要传入block参数,这个参数指的是当前存储块号。不填默认是0。第1次调用时,block设置为0。服务端会返回totalBlock。后面采用循环调用,遍历导出block块里面的用户。
POST /api/auth-service/v1/server/user:export HTTP/1.1
Host: connect-api.cloud.huawei.com
client_id: 706393620810318464
productId: 736430079245863316
Authorization: Bearer eyJraWQiOiJ6MktUWkdvbW1kTEZNRUtEVnUzRk5uaDJiSWtRWml5ZyIsInR5cCI6IkpXVCIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiI3MDYzOTM2MjA4MTAzMTg0NjQiLCJkbiI6MiwiY2xpZW50X3R5cGUiOjEsImV4cCI6MTYzMDY1NDIxNiwiaWF0IjoxNjMwNDgxNDE2fQ._Biybe203YzZ3iWGFDZSbnQSPkf36l6NinUITN0X1ng
Content-Type: application/json
Content-Length: 19{ "block": 0
}
在返回中我们就可以看到我们指定的存储块号中的所有用户信息,用户信息结构与导入时开发者传的结构一致
4、验证用户凭据
在客户端侧用户认证服务登录成功以后,一些开发者对认证服务的整个流程并不信任,想再次验证一下认证服务的登录是否合法。认证服务就提供了服务器侧验证token的接口。这个token是在客户端侧登录成功后返回的。我们只需要在Header中放入clientid,步骤1中的token和我们需要验证的token即可:
GET /api/oauth2/third/v1/verify-token?productId=736430079244583900 HTTP/1.1
Host: connect-api.cloud.huawei.com
accessToken: eyJhbGciOiJIUzUxMiJ9.eyJ0b2tlbiI6IjRBODFDNEZFOEEwMkQ1RjU1NzFDQTgwMEMwQjVBNTFFQTI1NUNBNjE4RkQwRUNFN0ExRjU4NUVDMEFDQkMwQTgifQ.H97Qv1pjwGX6GPj-UZoXwPV2fhVXUjobixXdslMLF2hGz-a52W_-tmVp0RXCLXanBbbU44yj4miUP7SDEMIk9w
client_id: 625298440531751552
Authorization: Bearer eyJraWQiOiJ6MktUWkdvbW1kTEZNRUtEVnUzRk5uaDJiSWtRWml5ZyIsInR5cCI6IkpXVCIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiI2MjUyOTg0NDA1MzE3NTE1NTIiLCJkbiI6MiwiY2xpZW50X3R5cGUiOjEsImV4cCI6MTYzMDY1MDU2MSwiaWF0IjoxNjMwNDc3NzYxfQ.PZlAGmszEOz7oMGZEvvtLbst0mZ8tDGsn-UujojUePE
在返回中我们可以获取这个token相关的uid等信息:
5、撤销用户凭据
认证服务还提供了可以撤销某个特定用户的凭据的功能,只需要在Header中传入clientid、token和需要撤销的用户的uid即可。
POST /api/oauth2/third/v1/revoke-token?productId=736430079244583900 HTTP/1.1
Host: connect-api.cloud.huawei.com
uid: 706376082420400832
client_id: 625298440531751552
Authorization: Bearer eyJraWQiOiJ6MktUWkdvbW1kTEZNRUtEVnUzRk5uaDJiSWtRWml5ZyIsInR5cCI6IkpXVCIsImFsZyI6IkhTMjU2In0.eyJzdWIiOiI2MjUyOTg0NDA1MzE3NTE1NTIiLCJkbiI6MiwiY2xpZW50X3R5cGUiOjEsImV4cCI6MTYzMDY1MDU2MSwiaWF0IjoxNjMwNDc3NzYxfQ.PZlAGmszEOz7oMGZEvvtLbst0mZ8tDGsn-UujojUePE
返回中我们可以获取操作是否成功
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh