spring-security-oauth-client 密码模式Password 如何使用PHP 模拟请求获取Access-Token

版权声明:廖圣平博客,未经博主允许不得转载。企鹅:1194008361 https://blog.csdn.net/qq_22823581/article/details/85000388

介绍

本篇文章讲的是oauth2.0 的密码模式怎么用PHP 模拟登录的,不是Oauth2.0 的介绍,如果是学习PHP-Oauth2请跳转:立即不看这篇文章-跳转到想看的文章
【官方叫:资源所有者密码凭证】
通俗易懂的:用username password 登录即可。如果想了解其他模式可以看我的github:
https://github.com/liaoshengping/oauth2-php

目的

这个是php 的:
在这里插入图片描述
java:spring-security-oauth-client

在这里插入图片描述
在这里插入图片描述

开始

如果用php的oauth2-server-php 服务参考这篇文章
https://blog.csdn.net/qq_22823581/article/details/84439803

注意:这边介绍的是接第二种的验证的请求【要在header里面加东西】

1.用compsoer 网络请求插件,自己写一个curl也可以哈,guzzle 点击跳转Demo

Controller

    public function send(){
        $data = [
            'url'     => 'http://ip/oauth/token',
            'headers' => [
//                'Accept'        => 'application/json',
                'Authorization' => 'Basic '.base64_encode('你的clientID:你的Secret')
            ],
            'params'=>[
                'grant_type'=>'password',
                'username'=>'admin',
                'password'=>'123456',
                'scope'=>'trust',
            ],
        ];
        $res = Tool::sendRequest($data);
        var_dump($res);exit;
    }

穿插一下,client_credentials模式的$data,与password模式无关,可忽略

        $oauth2 = \Yaconf::get('im.'.$fromhost.'.oauth');
        $Authorization  =base64_encode($oauth2['client_id'].':'.$oauth2['client_secret']);
        $data = [
            'url'     => $oauth2['getaccesstoken'],
            'headers' => [
                'Accept'        => 'application/json',
                'Authorization' => 'Basic '.$Authorization,
            ],
            'params'=>[
                'grant_type'=>'client_credentials',
            ],
        ];

Tool::sendRequest

use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
    public static function sendRequest(array $data)
    {
        try {
            $url = $data['url'];
            $client = new Client();
            $params = $data['params'] ?? [];
            $method = $data['request_method'] ?? 'POST';
            $timeout = $data['timeout'] ?? 10;
            $options = [
                'form_params' => $params,
                'timeout' => $timeout
            ];
            if (isset($data['headers'])) {
                $options['headers'] = $data['headers'];
            }
            $response = $client->request($method, $url, $options);
            $result = $response->getBody();
            return json_decode($result, true);
        } catch (ClientException $e) {
            return false;
        }
    }

没有更多推荐了,返回首页