亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Verzeichnis suchen
閱讀前篇 簡(jiǎn)介 Yii 是什么 從 Yii 1.1 升級(jí) 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請(qǐng)求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請(qǐng)求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測(cè)試 概述(Overview) 配置測(cè)試環(huán)境(Testing environment setup) 單元測(cè)試(Unit Tests) 功能測(cè)試(Function Tests) 驗(yàn)收測(cè)試(Acceptance Tests) 測(cè)試夾具(Fixtures) 高級(jí)專題 高級(jí)應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
Figuren

授權(quán)認(rèn)證

認(rèn)證

和Web應(yīng)用不同,RESTful APIs 通常是無狀態(tài)的,也就意味著不應(yīng)使用sessions 或 cookies, 因此每個(gè)請(qǐng)求應(yīng)附帶某種授權(quán)憑證,因?yàn)橛脩羰跈?quán)狀態(tài)可能沒通過sessions 或 cookies維護(hù), 常用的做法是每個(gè)請(qǐng)求都發(fā)送一個(gè)秘密的access token來認(rèn)證用戶,由于access token可以唯一識(shí)別和認(rèn)證用戶,?API 請(qǐng)求應(yīng)通過HTTPS來防止man-in-the-middle (MitM) 中間人攻擊.

下面有幾種方式來發(fā)送access token:

  • HTTP 基本認(rèn)證: access token 當(dāng)作用戶名發(fā)送,應(yīng)用在access token可安全存在API使用端的場(chǎng)景,例如,API使用端是運(yùn)行在一臺(tái)服務(wù)器上的程序。
  • 請(qǐng)求參數(shù): access token 當(dāng)作API URL請(qǐng)求參數(shù)發(fā)送,例如?https://example.com/users?access-token=xxxxxxxx,由于大多數(shù)服務(wù)器都會(huì)保存請(qǐng)求參數(shù)到日志, 這種方式應(yīng)主要用于JSONP?請(qǐng)求,因?yàn)樗荒苁褂肏TTP頭來發(fā)送access token
  • OAuth 2: 使用者從認(rèn)證服務(wù)器上獲取基于OAuth2協(xié)議的access token,然后通過?HTTP Bearer Tokens?發(fā)送到API 服務(wù)器。

Yii 支持上述的認(rèn)證方式,你也可很方便的創(chuàng)建新的認(rèn)證方式。

為你的APIs啟用認(rèn)證,做以下步驟:

  1. 配置user?應(yīng)用組件:
    • 設(shè)置 yii\web\User::enableSession 屬性為?false.
    • 設(shè)置 yii\web\User::loginUrl 屬性為null?顯示一個(gè)HTTP 403 錯(cuò)誤而不是跳轉(zhuǎn)到登錄界面.
  2. 在你的REST 控制器類中配置authenticator?行為來指定使用哪種認(rèn)證方式
  3. 在你的yii\web\User::identityClass 類中實(shí)現(xiàn) yii\web\IdentityInterface::findIdentityByAccessToken() 方法.

步驟1不是必要的,但是推薦配置,因?yàn)镽ESTful APIs應(yīng)為無狀態(tài)的,當(dāng)yii\web\User::enableSession為false, 請(qǐng)求中的用戶認(rèn)證狀態(tài)就不能通過session來保持,每個(gè)請(qǐng)求的認(rèn)證通過步驟2和3來實(shí)現(xiàn)。

提示: 如果你將RESTful APIs作為應(yīng)用開發(fā),可以設(shè)置應(yīng)用配置中?user?組件的yii\web\User::enableSession, 如果將RESTful APIs作為模塊開發(fā),可以在模塊的?init()?方法中增加如下代碼,如下所示:

public function init(){
    parent::init();
    \Yii::$app->user->enableSession = false;
}

例如,為使用HTTP Basic Auth,可配置authenticator?行為,如下所示:

use yii\filters\auth\HttpBasicAuth;

public function behaviors(){
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => HttpBasicAuth::className(),
    ];
    return $behaviors;
}

如果你系那個(gè)支持以上3個(gè)認(rèn)證方式,可以使用CompositeAuth,如下所示:

use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;

public function behaviors(){
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => CompositeAuth::className(),
        'authMethods' => [
            HttpBasicAuth::className(),
            HttpBearerAuth::className(),
            QueryParamAuth::className(),
        ],
    ];
    return $behaviors;
}

authMethods?中每個(gè)單元應(yīng)為一個(gè)認(rèn)證方法名或配置數(shù)組。

findIdentityByAccessToken()方法的實(shí)現(xiàn)是系統(tǒng)定義的, 例如,一個(gè)簡(jiǎn)單的場(chǎng)景,當(dāng)每個(gè)用戶只有一個(gè)access token, 可存儲(chǔ)access token 到user表的access_token列中, 方法可在User類中簡(jiǎn)單實(shí)現(xiàn),如下所示:

use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface{
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token' => $token]);
    }
}

在上述認(rèn)證啟用后,對(duì)于每個(gè)API請(qǐng)求,請(qǐng)求控制器都會(huì)在它的beforeAction()步驟中對(duì)用戶進(jìn)行認(rèn)證。

如果認(rèn)證成功,控制器再執(zhí)行其他檢查(如頻率限制,操作權(quán)限),然后再執(zhí)行操作, 授權(quán)用戶信息可使用Yii::$app->user->identity獲取.

如果認(rèn)證失敗,會(huì)發(fā)送一個(gè)HTTP狀態(tài)碼為401的響應(yīng),并帶有其他相關(guān)信息頭(如HTTP 基本認(rèn)證會(huì)有WWW-Authenticate?頭信息).

授權(quán)

在用戶認(rèn)證成功后,你可能想要檢查他是否有權(quán)限執(zhí)行對(duì)應(yīng)的操作來獲取資源,這個(gè)過程稱為?authorization?, 詳情請(qǐng)參考?Authorization section.

如果你的控制器從yii\rest\ActiveController類繼承,可覆蓋 yii\rest\Controller::checkAccess() 方法 來執(zhí)行授權(quán)檢查,該方法會(huì)被yii\rest\ActiveController內(nèi)置的操作調(diào)用。
Vorheriger Artikel: N?chster Artikel: