[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 受權

 【暫時略】

相關文章
相關標籤/搜索