[AWS] User management

IAM用户管理

Ref: AWS系列-建立 IAM 用户javascript

Ref: AWS系列:深刻了解IAM和访问控制html

 

是什么?java

IAM enables you to control who can do what in your AWS account.react

在AWS里,一个IAM user和unix下的一个用户几乎等价。ios

 

干什么?git

把握好IAM的精髓,须要深刻了解policy,以及如何撰写policy。github

前面咱们看到,policy是用JSON来描述的,主要包含Statement,也就是这个policy拥有的权限的陈述,一言以蔽之,即:谁在什么条件下能对哪些资源的哪些操做进行处理。也就是所谓的撰写policy的PARCE原则web

    • Principal:谁
    • Action:哪些操做
    • Resource:哪些资源
    • Condition:什么条件
    • Effect:怎么处理(Allow/Deny)

 

 

Cognito用户管理

简单安全的用户注册、登陆和访问控制spring

Ref: Aws cognitor 用户注册 登陆身份 [用户池,联合身份]数据库

Goto: 先读官方文档 [Amazon Cognito 文档]

Goto: 开发人员指南 [需仔细阅读]

Code: 邮箱登陆,有实例

 

什么是 Amazon Cognito?

两个主要组件:

用户池,提供注册和登陆选项的用户目录

身份池,提供 AWS 凭证以向用户授予对其余 AWS 服务的访问权限

 

通常是混合使用:

    1. 在第一步中,您的应用程序用户经过用户池登陆,并在成功进行身份验证后收到持有者令牌

    2. 接下来,您的应用程序经过身份池用户池令牌交换 AWS 凭证

    3. 最后,您的应用程序用户可使用这些 AWS凭证来访问其余 AWS 服务 (如 Amazon S3 或 DynamoDB)。

 

常见 Amazon Cognito 场景

  • 使用用户池进行身份验证

您能够容许您的用户使用用户池进行身份验证。

    1. 经过用户池直接登陆,
    2. 经过第三方身份提供商 (IdP) 间接登陆。

成功进行身份验证后,您的 Web 或移动应用程序将收到来自 Amazon Cognito 的持有者令牌

    • 您可使用这些令牌检索容许您的应用程序访问其余 AWS 服务的 AWS 凭证,
    • 也能够选择使用它们来控制对您本身的资源或 Amazon API Gateway 的访问。
 
  • 使用用户池访问您本身的资源

您能够容许您的用户使用来自成功的身份验证的用户池令牌访问您本身的资源。

有关更多信息,请参阅 用户池身份验证流程 和 将令牌与用户池结合使用

 经过用户池访问您本身的资源

 

Amazon Cognito 用户池

初步理解

先决条件:注册 AWS 帐户

步骤 1.使用用户池建立用户目录 

步骤 2.添加应用程序以启用托管 Web UI (可选) 

* 应用程序客户端

[获取应用程序客户端 ID]

* 应用程序客户端设置

(1) 登陆 URL 和注销 URL

一个回调 URL,供 Amazon Cognito 受权服务器在用户经过身份验证以后进行调用。

对于 Web 应用程序,该 URL 应以 https:// 开头,如 https://www.example.com。

(2) OAuth2.0

选项一:选择受权代码授予以返回随后与用户池令牌交换的受权代码。

因为令牌毫不会直接向最终用户公开,所以它们不太可能被泄露。

可是,后端须要自定义应用程序以将受权代码换成用户池令牌。

出于安全缘由,强烈建议您将受权代码授予流程代码交换的证实密钥 (PKCE) 一块儿用于移动应用程序。

选项二:在容许的 OAuth 流程下,选择隐式授予以便从 Amazon Cognito 将用户池 JSON Web Token (JWT) 返回给您。

当没有可用于将受权代码换成令牌的后端时,您可使用此流程。它对于调试令牌也颇有帮助。

选项一加二:您能够同时启用受权代码授予隐式代码授予,而后按需使用每一个授予。

除非您但愿明确地排除一个容许的 OAuth 范围,不然请选中全部“容许的 OAuth 范围”的复选框。

选项三:只有在您的应用程序须要表明本身而不是表明用户请求访问令牌时才选择 Client credentials

* 添加域名 

域名页面上,键入可用的域前缀。并记下完整的域地址。

https://

.auth.ap-southeast-2.amazoncognito.com

 

步骤 3.向用户池添加社交登陆 (可选)

步骤 4.将使用 SAML 身份提供商的登陆添加到用户池 (可选) 

好比,公司(idp)的用户要访问SAAS 应用(sp)

Amazon Cognito 身份开发工具包是核心用户池库。

安装它以便与 Amazon Cognito 用户池 API 中的用户管理和身份验证功能交互。

Amazon Cognito 验证开发工具包利用了内置的托管 UI 网页。

安装它以出于如下目的将网页添加到您的应用程序:注册、登陆、确认、多重验证 (MFA) 和注销。

 

具体实践

添加 JavaScript 应用程序

  • 服务器配置

步骤1, 得到 用户池 ID 和 客户端 ID

步骤2, 在应用程序中建立一个用户池对象

AWSCognito.config.region = 'us-east-1';
     
var poolData = {
    UserPoolId : '...', // your user pool id here
    ClientId : '...' // your app client id here
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); var userData = { Username : '...', // your username here Pool : userPool };
  • 用户注册

步骤 3:为应用程序注册用户

var attributeList = [];
// 01
var dataEmail = { Name : 'email', Value : '...' // your email here };
var dataPhoneNumber = { Name : 'phone_number', Value : '...' // your phone number here with +country code and no delimiters in front };

// 02
var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); var attributePhoneNumber = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber);
// 03 attributeList.push(attributeEmail); attributeList.push(attributePhoneNumber);
var cognitoUser; userPool.signUp('username', 'password', attributeList, null, function(err, result){ if (err) { alert(err); return; } cognitoUser = result.user; console.log('user name is ' + cognitoUser.getUsername()); });

步骤 4:为应用程序确认用户

cognitoUser.confirmRegistration('123456', true, function(err, result) {    // 根据用户收到的代码来confirm if (err) {
        alert(err);
        return;
    }
    console.log('call result: ' + result);
});
  • 用户登陆

步骤 5:让用户登陆应用程序

已确认的用户登陆以获取会话。该会话包含如下内容:

一个包含用户声明的 ID 令牌;

一个访问令牌,在内部用于执行通过身份验证的调用;

一个刷新令牌,在内部使用,用于在会话过时后按每小时一次的频率刷新会话。

    var authenticationData = {
        Username : '...', // your username here
        Password : '...', // your password here
    };
    var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
 
    var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (result) {
            console.log('access token + ' + result.getAccessToken().getJwtToken());
        },
 
        onFailure: function(err) {
            alert(err);
        },
/* 必须传递收到的验证代码,而后用户才能登陆(暂时不必) */ mfaRequired:
function(codeDeliveryDetails) {  //若是登陆须要 MFA,则调用此函数 var verificationCode = prompt('Please input verification code' ,''); cognitoUser.sendMFACode(verificationCode, this);  // 且必须在  对象上调用  } });cognitoUsersendMFACode

关于MFA from 连接

Multi-Factor Authentication (MFA) 是一种简单有效的最佳安全实践方法,它可以在用户名和密码以外再额外增长一层安全保护。

启用 MFA 后,用户登陆阿里云网站时,系统将要求输入用户名和密码(第一安全要素),而后要求输入来自其 MFA 设备的动态验证码(第二安全要素),双因素的安全认证将为您的帐户提供更高的安全保护

MFA 设备能够基于硬件也能够基于软件,目前阿里云官网支持基于软件的虚拟 MFA。

  • 找回密码

步骤 6:获取用户详细信息

有不少,其中“找回密码”最为重要,实现以下。

cognitoUser.forgotPassword({
    onSuccess: function (result) {
        console.log('call result: ' + result);
    },
    onFailure: function(err) {
        alert(err);
    },
    inputVerificationCode() {
        var verificationCode = prompt('Please input verification code ' ,'');
        var newPassword = prompt('Enter new password ' ,'');
        cognitoUser.confirmPassword(verificationCode, newPassword, this);
    }
});

 

步骤 7:为应用程序用户获取访问 AWS 资源的凭证

 AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
    Logins: {
        'cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXXXX': result.getIdToken().getJwtToken()
    }
});
 
AWS.config.credentials.get(function(err){
    if (err) {
        alert(err);
    }
});

  

 

 

Register/Login implement


 

预热的几个连接

(1) Ref:https://github.com/dbroadhurst/aws-cognito-react

The AWS guide can be found here

You can find a working example here

 

(2) Ref: https://github.com/AravindNico/AwsCognitoUserLogin/blob/master/AWS%20COGNITO.pdf

Without react, pure html solution.

 

(3) Ref: isotoma/react-cognito

NOTE: AWS have now released AWS Amplify, which might be more suitable for your needs than react-cognito.

 

(4) Ref: AnomalyInnovations/serverless-stack-demo-client

五星级代码,配套aws-amplify官方指导。

 

 

为何要使用cognito?

Goto: React & Redux 实现注册登陆认证系统

可见,本身实现登陆以及用户管理是有多么复杂。

 


  

正式开学

Ref: aws/aws-amplify

A declarative JavaScript library for application development using cloud services. 

 

Features / APIs

  • Authentication: APIs and building blocks for developers who want to create user authentication experiences.
  • Analytics: Easily collect analytics data for you app. Analytics data includes user sessions and other custom events that you want to track in your app.
  • API: Provides a simple solution when making HTTP requests. It provides an automatic, lightweight signing process which complies with AWS Signature Version 4.
  • GraphQL Client: Interact with your GraphQL server or AWS AppSync API with an easy to use & configure GraphQL client.
  • Storage: Provides a simple mechanism for managing user content for your app in public, protected or private storage buckets.
  • Push Notifications: Allows you to integrate push notifications in your app with Amazon Pinpoint targeting and campaign management support.
  • PubSub: Provides connectivity with cloud-based message-oriented middleware.
  • Internationalization: A lightweight internationalization solution.
  • Cache: Provides a generic LRU cache for JavaScript developers to store data with priority and expiration settings.

 

Collect user session metrics(...)

See our Analytics Developer Guide for detailed information.

 

Add Authentication to your App

Add user sign up and sign in using two of the many methods available to the Auth class:

import { Auth } from 'aws-amplify';

Auth.signUp({
  username: 'AmandaB',
  password: 'MyCoolPassword1!',
  attributes: {
    email: 'someemail@example.com'
  }
});
  
Auth.signIn(username, password)
  .then(success => console.log('successful sign in!'))
  .catch(err => console.log(err));

 See our Authentication Developer Guide for detailed information.

 

React

Adding authentication to your React or React Native app is as easy as wrapping your app's main component with our withAuthenticator higher order component. AWS Amplify will provide you customizable UI for common use cases such as user registration and login.

import { withAuthenticator } from 'aws-amplify-react-native';

export default withAuthenticator(App);

 

 

以上只是个超级库的开源代码,咱们须要的是如何使用这个库。

也就是,如何使用这个库的例子。

 

 

Ref: smoghal/cognito-amplify-custom-auth 

A React/Redux web application that implements a custom UI for Cognito Userpool Auth using AWS Amplify.

效果完美,值得研究。

[AWS Amplify]

 

Ref: https://github.com/dbroadhurst/aws-cognito-react

此文值得一读:聊一聊 redux 异步流之 redux-saga

[AWS Cognito Redux Saga]

 

Ref: https://github.com/ganezasan/react-cognito-auth

Ref: https://github.com/GregoryBabonaux/react-cognito-auth

登陆界面不错,但功能缺失,只供参考。

 

 

Oauth2.0

Access Token
eyJraWQiOiJvQ1J4RWFRVG5CQzR0WHY3b0NEekQrWHFyOXVCeVJwK25vczFWbjVGdzlRPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI1ZWIzOWY0MC0xNDY4LTQyYjgtODAxMS03MGE1MTg2NWIzZDUiLCJldmVudF9pZCI6ImE5Y2MyNWEzLTVjYmUtMTFlOC1hNzRjLTVmN2I0MjA3OTNkNiIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4iLCJhdXRoX3RpbWUiOjE1MjY4ODM0NTksImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbVwvdXMtZWFzdC0xX0VFdFhjTzJQViIsImV4cCI6MTUyNjg4NzA1OSwiaWF0IjoxNTI2ODgzNDYwLCJqdGkiOiJhODFkMTJiZi05NTBkLTQyNjMtYWU4Yy1lNGMyMTUxNjE0N2YiLCJjbGllbnRfaWQiOiI3OWMyaWVvOHVic2liY3FuN21zazE5ZWE4OSIsInVzZXJuYW1lIjoiamVzc2UuaGFvMTIzQGdtYWlsLmNvbSJ9.IsC-Ht33NdMp_1Hp2PyBXhZ6iyG5hoHBu0J1rBVPf8_vK0h7UtkL9U4J9emOpC0C2zHUkPVDoanbIcxGOx1IywdtDf6EYjbMNhMibxvH9ND-YVrM02fmmrIGI4kca6ZDmgE-akN3mqrATvtx7dXiJH_H5BD7V993ToyjiHJdJtuqGK_WrFqudEp_JkG2EXyRS5NF5rt9VH8Fe5caPI-j0y2OF_ZO2BMtlDm6tssAN1yBJbT50-e37up-eNUIcL0RQgILA4ksEwtrA-PtgLdR0D5wSRSBBWgAtFssDSCB8dtJRFhd2WI1GwYirBwVmbshgHOHfyZOHbBtRmus-Lnyiw
ID Token
eyJraWQiOiIzcXJ6R2hhMHVQTDNHQ0FIcDJSNXVqSStJM0FiVThQTnA4ZmJlM0VJWEdBPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI1ZWIzOWY0MC0xNDY4LTQyYjgtODAxMS03MGE1MTg2NWIzZDUiLCJhdWQiOiI3OWMyaWVvOHVic2liY3FuN21zazE5ZWE4OSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImE5Y2MyNWEzLTVjYmUtMTFlOC1hNzRjLTVmN2I0MjA3OTNkNiIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNTI2ODgzNDU5LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9FRXRYY08yUFYiLCJjb2duaXRvOnVzZXJuYW1lIjoiamVzc2UuaGFvMTIzQGdtYWlsLmNvbSIsImV4cCI6MTUyNjg4NzA1OSwiaWF0IjoxNTI2ODgzNDYwLCJlbWFpbCI6Implc3NlLmhhbzEyM0BnbWFpbC5jb20ifQ.PnMKwH5dikcWM_bWObXYcJwnIZBl7K5Pa2KZAWbqwdgkPC5eY95aVOBUL1VcOSBGw3WY9Rb5D4IH4Cj1IhUndAllrOPHPffJzfYOFkux3m2AKpIv2_qf35Pw9n_1yP377YkkQdx0sLl1C18WBvAHtOQqS25s4scCTLs8XiLNl_IscmB2NCJC6_6-lkYqu-R0ZFhw-xcPoK4103RtnZgtMvZyZqWi7fz_yyqKiKKdL6gc8j_IzqCxvYzsYDg1nM_OiUGTSwj8P-Xe68XR5u_GDT46yubMHhy43Fa7qOdpPVs5nEiX558FiB7sgabCKmtephlI1-UoHSWK9c_ydiooqg
Refresh Token
eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.R2ciWizVvS1cjKa-O8yib3YfDOVGJ_KPRCv2Q2V-fLGfs_Aua9rYrEUUNK3r1K2O7S5LME3gckLJJRwmhV0jwW53nhMpXy0QaxUqRtVk7fgzFIVJzU0XEBYAXef7Qtn-ZWwymtsLelO_BTjzz8u9XCgjgJferroelsa77lWw6xnPefLnv-HE7x2GLMnbv3QPl38LDRVVIJ66NVkTgnRE_AkgAf4x2E7WtF99ZghV5_tQEzacpZwYltjQN1koljd8rKb95f64VczYS3nIUj4XMgZLaYeQpkP9MlfVtxgE6hupDr6pk2qWQlA7UOHohKfX-lpX5Ny0P3w388nPAkmJOg.6CKOk0I9Ty10rxwf.MzPiwbRuij1y83qrjXSVW5_LgVxtIdtGX3WibgvY7ACp3mS1IZKaqZmGYcAIPR-BArnT4hYYnAym-D1gXInmafEuj9bSZXlWODe72Oae_6LVu0hoCdDOEJOkNsgAERP5tSOkkL8Vv18PADV8jV3HXFk-jvBaSNxY8nEjHyIMkWo-CmRhUzTmOQ79xU7ZK683C81ZdO5dt6wMw3cdd5iuE8DA9huGqUkLMnTYUUVwQSwkelXuDhi0IReirCdfabdBZu9EfPsR38PI3Pl0MY469aO2Fb6tmcQzEdOF_OurATQUMMFL1vcOWkgFW8aLJjJSNuby943iwZZZNOMvPLE4i6DIYh6Xxh3bkjLj2NPCBmODFGLfzbfDYtJ-dtOZ-3dBPst1bBLOru0TNFAR_kNnc1yg-JMXmigo3beS-wP40UiFWEN3BPORcv_KaNWaIi0x5yqvhWtkA4W9Ub_OykLxOWKgiHikjXq4Os_huyDzrVuNvmCp3g0GalT4wMa6YETK21rxVCddDUCFjtJl-_XRP9E1MxSfOQAV9-kpRYTEHD3AWxPNWHwqVtDSEkNHwC2gbq87uIZ7XW0hnpI2n5w7vtIcaxrdwDkCOI8qxSNccaJWnqtZYD61K7Kqc7-aWItOCo5lIZo0gVocrAzG9WGZLA3g2olYCHjsStE-f4fDv5uOCTcifE5ib5LJgwGmyjc0VNusELG2920DkSDVeF4jIr8NlaG4MvXIg-Cfwg_VcZgm6yMIqMFt5lDk3jigQIggJFJFzRVgFBb5oarFMKejTLNpZcLqBltchcY4VYQxqdLtj8oNdD85FmOK6VIKrdaWTqie861XsEctUB9-BPvhdabx039dqZuCChy62V9wNtugDS9x_XvR2Pm0xRZdBG3D4xHaDKPZ4CchZSnmufKpeH1VQHulKzA53d7LbDjOgUOVgkDEkICmYar8QWkcV7i1Q9y-HBwkJmEPWD6IjFkjkNDr0EDAqkoyVs_nD6cnVFi6lA6jVqbLb7TYxB0RMydaWBK7D3W4hspIQARLx_9D1o7GJklbw5ADxSJRMIsbezwvRhMIFrCTCTZCQYlha4DmIhZVLDSzUydK8AH1QFoCJjemSU7mB5y_h26eIjCbE8TvnTa4L80FJw-pKCcTT5eYFyJPJOnSKk3u6LHv3mU2IDnZAnrHDVg2HIKe1MLzYWFXcPjt3KgMwQQWDuLUyAFDU6bTlFbVT2vPPkjKEyqs6niAsFuDBDl2ci7tSl8R2Jb0ny6qF56YoKxIbmv6UDT_sfGOt3lyMRvXDDxhMRwY94oViOimuOZp9lNj4Q.v85uUCWjQZMiT7CZrDB_mg
三个tokens

OAuth2.0 

  • Access Token
  • ID Token
  • Refresh Token
 

Oauth2.0(一):为何须要 Oauth2.0 协议? [博文写得比较系统]

三方要怎么打交道,才能作到安全、合理。
A方:客户端
B方:资源服务器+鉴权服务器

 

有了这个访问令牌,A 就能够拿着它去找 资源服务器要资源了。

因此,获取相片的接口会是这个形式:

http://xxx.xxx.com/getPhoto?accesstoken=

资源服务器在接收到这个请求以后,会拿着 access token,再去找鉴权服务器,检查这个 access token 的合法性和权限,若是经过的话,才返回资源给客户端。

 

Oauth2.0(二):开放平台

鉴权服务器须要知道请求受权的客户端的身份以及该客户端请求的权限。

因此,一次合做,为每个客户端预先分配一个 id,并给每一个 id 对应一个名称以及权限信息。

这些信息能够写在鉴权服务器上的配置文件里。而后,客户端每次打开鉴权页面的时候,把属于本身的 id 传过来,像这样:

http://xxx.xxx.com/oauthPage?client_id=xxx

鉴权服务器就能够根据这个 id 去展现受权信息了。

 

这个流程是 ok 的。可是,随着时间的推移和业务的增加,会发现,修改配置的工做消耗了太多的人力。有没有办法把这个过程自动化起来,把人工从这些繁琐的操做中解放出来?

当开始考虑这一步,开放平台的成型也就是水到渠成的事情了。

 

开放平台是由 Oauth2.0 协议衍生出来的一个产品。它的做用是让客户端本身去这上面进行注册、申请,经过以后系统自动分配 client_id ,并完成配置的自动更新(一般不是配置文件,而是写进数据库)。

开放平台的一个实例:http://open.weibo.com/

客户端要完成申请,一般须要填写客户端程序的类型(web、移动端app等)、企业介绍、执照、想要获取的权限等等信息。

这些信息在获得服务提供方的人工审核经过后,开发平台就会自动分配一个 client_id 给客户端了。

 

到这里,已经实现了登陆认证、鉴权页的信息展现。那么接下来,当用户成功进行受权以后,鉴权服务器须要把产生的 access token 发送给客户端。这一步,怎么作?

方案是这样的:让客户端在开放平台申请的时候,填写一个 url,例如: 

http://www.abc.com

而后。每次当有用户受权成功以后,鉴权服务器将页面重定向到这个 url ,并带上 access token。这一步叫作回调。例如:

http://www.abc.com?accesstoken=xxxxxxxx

这样,客户端就接收到了这个 access token,并且鉴权服务器的受权动做已经完成,恰好能够把程序的控制权转交回客户端,由客户端决定接下来向用户展现什么内容。

 

Oauth2.0(三):Access Token 与 Refresh Token

然而引入了有效期以后,客户端使用起来就不那么方便了。每当 access token 过时,客户端就必须从新向用户索要受权。这样用户可能每隔几天,甚至天天都须要进行受权操做。这是一件很是影响用户体验的事情。但愿有一种方法,能够避免这种状况。

因而 Oauth2.0 引入了 refresh token 机制。refresh token 的做用是用来刷新 access token。鉴权服务器提供一个刷新接口,例如:

http://xxx.xxx.com/refresh?refreshtoken=&client_id=

 

传入 refresh token 和 client_id,鉴权服务器验证经过后,返回一个新的 access token。

为了安全,Oauth2.0 引入了两个措施:

1,Oauth2.0 要求,refresh token 必定是保存在客户端的服务器上的,而毫不能存放在狭义的客户端(例如移动 app、PC端软件) 上。调用 refresh 接口的时候,必定是从服务器到服务器的访问;

2,Oauth2.0 引入了 client_secret 机制。即每个 client_id 都对应一个 client_secret。这个 client_secret 会在客户端申请 client_id 时,随 client_id 一块儿分配给客户端。客户端必须把 client_secret 妥善保管在服务器上,决不能泄露。刷新 access token 时,须要验证这个 client_secret。

因而,实际上的刷新接口应该是相似这样的:

http://xxx.xxx.com/refresh?refreshtoken=&client_id=&client_secret=

 

Oauth2.0(四):Implicit 受权方式 [不推荐]

Oauth2.0(五):Authorization Code 受权

 【暂时略】

相关文章
相关标签/搜索