日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置消費(fèi)者鑒權(quán)

更新時(shí)間:

云原生網(wǎng)關(guān)支持為路由配置認(rèn)證,并對(duì)指定的消費(fèi)者進(jìn)行鑒權(quán),以允許對(duì)應(yīng)消費(fèi)者訪問路由。本文介紹如何配置消費(fèi)者鑒權(quán)。

背景信息

相比全局認(rèn)證鑒權(quán)適用于統(tǒng)一登錄認(rèn)證等ToC場(chǎng)景,路由認(rèn)證和消費(fèi)者鑒權(quán)模式適用于授權(quán)API給合作伙伴等ToB場(chǎng)景。

對(duì)比項(xiàng)

全局認(rèn)證鑒權(quán)

路由認(rèn)證+消費(fèi)者鑒權(quán)

適用場(chǎng)景

統(tǒng)一登錄認(rèn)證等ToC場(chǎng)景。

授權(quán)API給合作伙伴等ToB場(chǎng)景。

核心差異

開啟認(rèn)證的同時(shí)也開啟鑒權(quán)。

開啟認(rèn)證后,需要額外做鑒權(quán)配置。

配置入口

安全管理 > 全局認(rèn)證鑒權(quán)

  1. 路由管理 > 策略配置 > 認(rèn)證

  2. 安全管理 > 消費(fèi)者鑒權(quán)

認(rèn)證方式配置(以JWT認(rèn)證為例)

  1. 創(chuàng)建配置時(shí)填寫全局的JWKS配置。

  2. 填寫issuesub字段作為識(shí)別JWT是否合法的依據(jù)。

  1. 創(chuàng)建消費(fèi)者配置時(shí)填寫該消費(fèi)者對(duì)應(yīng)的JWKS配置。

  2. 填寫消費(fèi)者標(biāo)識(shí)用于識(shí)別JWT是否為對(duì)應(yīng)的消費(fèi)者。默認(rèn)為payload中的uid字段,可以自定義。

鑒權(quán)方式配置

創(chuàng)建配置時(shí)填寫黑名單或白名單的域名路徑(Path)列表。

  • 黑名單模式:名單中的域名路徑(Path)需要進(jìn)行認(rèn)證,其余無需認(rèn)證可直接訪問。

  • 白名單模式:名單中的域名路徑(Path)不需要認(rèn)證即可訪問,其余需要進(jìn)行認(rèn)證。

  1. 在路由策略配置中為路由開啟認(rèn)證

  2. 消費(fèi)者鑒權(quán)中關(guān)聯(lián)開啟了認(rèn)證的路由,完成授權(quán)。

創(chuàng)建消費(fèi)者

  1. 登錄MSE網(wǎng)關(guān)管理控制臺(tái),并在頂部菜單欄選擇地域。

  2. 在左側(cè)導(dǎo)航欄選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表

  3. 網(wǎng)關(guān)列表頁(yè)面,單擊目標(biāo)網(wǎng)關(guān)名稱。

  4. 在左側(cè)導(dǎo)航欄,單擊安全管理 > 消費(fèi)者鑒權(quán)

  5. 單擊創(chuàng)建消費(fèi)者按鈕。

  6. 配置相關(guān)參數(shù),然后單擊確定

    創(chuàng)建消費(fèi)者.png

    配置參數(shù)說明如下。

    配置項(xiàng)

    描述

    消費(fèi)者名稱

    自定義消費(fèi)者的名稱。

    消費(fèi)者說明

    對(duì)消費(fèi)者進(jìn)行描述。

    認(rèn)證方式

    當(dāng)前消費(fèi)者支持的認(rèn)證方式。

    密鑰類型

    • 對(duì)稱密鑰:生成一份默認(rèn)的JWKS配置(每個(gè)消費(fèi)者不同),包含加密或者解密Token時(shí)使用的密鑰。

    • 非對(duì)稱密鑰:需要您自己填寫完整的JWKS配置,使用私鑰加密Token。網(wǎng)關(guān)根據(jù)JWKS中配置的公鑰進(jìn)行解密。

    JWKS

    設(shè)置JWKS配置,JWKS規(guī)范說明請(qǐng)參考JSON Web Key (JWK)

    JWT Token配置

    設(shè)置JWT Token配置信息。

    • 類型:Token參數(shù)類型。默認(rèn)Header。

    • Key:Token參數(shù)名稱。

    • 前綴:Token參數(shù)名的前綴。設(shè)置需要校驗(yàn)的Token參數(shù)信息,默認(rèn)是以Bearer為前綴放在Authorization Header中,例如:Authorization: Bearer token

    • 是否透?jìng)?/b>:選中Token參數(shù)透?jìng)鳎硎就競(jìng)鞔薚oken參數(shù)到后端服務(wù)。

    JWT Payload 內(nèi)消費(fèi)者標(biāo)識(shí)

    指定從JWT Payload中的Key以及對(duì)應(yīng)Value來識(shí)別為當(dāng)前消費(fèi)者。默認(rèn)提供一對(duì)標(biāo)識(shí),Key為uid,Value為隨機(jī)字符串,可以自行修改。

    以上圖配置為例,JWT Token中的Payload應(yīng)為如下所示:

    {
      "uid": "11215ac069234abcb8944232b79ae711"
    }

Token生成方式

本文應(yīng)用Java示例說明,其他語言用戶也可以找到相關(guān)的工具生成密鑰對(duì)。

新建一個(gè)Maven項(xiàng)目,注入如下依賴:

<dependency>
    <groupId>org.bitbucket.b_c</groupId>
    <artifactId>jose4j</artifactId>
    <version>0.7.0</version>
</dependency>

使用默認(rèn)對(duì)稱密鑰示例生成Token

展開查看代碼內(nèi)容

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        //使用本文上述示例
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        //設(shè)置過期時(shí)間,并且小于7天
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        //添加自定義參數(shù),所有值請(qǐng)都使用String類型
        //設(shè)置消費(fèi)者標(biāo)識(shí)
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        //設(shè)置加密算法
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

代碼相關(guān)設(shè)置說明。

  • privateKeyJson:即在創(chuàng)建消費(fèi)者時(shí)使用的JWKS,可以在創(chuàng)建消費(fèi)者時(shí)記錄下自己使用的JWKS,也可以在創(chuàng)建消費(fèi)者后,在消費(fèi)者基礎(chǔ)配置頁(yè)獲取JWKS。

    消費(fèi)者.png

  • 設(shè)置消費(fèi)者標(biāo)識(shí)。即claims.setClaim("uid", "11215ac069234abcb8944232b79ae711"),該消費(fèi)者標(biāo)識(shí)為創(chuàng)建消費(fèi)者時(shí)控制臺(tái)默認(rèn)生成,也可以根據(jù)自身邏輯進(jìn)行修改。

    消費(fèi)者標(biāo)識(shí).png

    您也可以在創(chuàng)建消費(fèi)者后,在消費(fèi)者基礎(chǔ)配置頁(yè)獲取消費(fèi)者標(biāo)識(shí)。獲取消費(fèi)者標(biāo)識(shí).png

  • 設(shè)置加密算法。即jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256),該加密算法要和JWKS保持一致。

    說明

    目前支持的加密算法有ES256、ES384、ES512、RS256、RS384、RS512、PS256、PS384、PS512、HS256、HS384、HS512和EdDSA。

    加密算法.png

    使用對(duì)稱加密的時(shí)候,需要對(duì)"k"進(jìn)行解碼。

    jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
  • 設(shè)置過期時(shí)間。過期時(shí)間需要小于7天,超出過期時(shí)間后,請(qǐng)重新生成Token,以保證Token的安全性。

    ...
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
    ...
  • 根據(jù)自身業(yè)務(wù)需要,可以在JWKS的PAYLOAD中添加自定義參數(shù)。

使用非對(duì)稱密鑰示例生成Token

展開查看代碼內(nèi)容

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        //使用本文上述示例
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        //設(shè)置過期時(shí)間,并且小于7天
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        //添加自定義參數(shù),所有值請(qǐng)都使用String類型
        //設(shè)置消費(fèi)者標(biāo)識(shí)
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        //設(shè)置加密算法
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

代碼相關(guān)設(shè)置說明。

  • 設(shè)置privateKeyJson、消費(fèi)者標(biāo)識(shí)、過期時(shí)間,同對(duì)稱加密算法。

  • 設(shè)置加密算法,即jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256)。該加密算法和JWKS保持一致。

    非對(duì)稱加密.png

    對(duì)于非對(duì)稱加密算法,要用其私鑰進(jìn)行加密。

    ...
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
        PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyJson)).getPrivateKey();
        jws.setKey(privateKey);
    ...
  • 根據(jù)自身業(yè)務(wù)需要,可以在JWKS的PAYLOAD中添加自定義參數(shù)。

開啟路由認(rèn)證

  1. 登錄MSE網(wǎng)關(guān)管理控制臺(tái),并在頂部菜單欄選擇地域。

  2. 在左側(cè)導(dǎo)航欄選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表

  3. 網(wǎng)關(guān)列表頁(yè)面,單擊目標(biāo)網(wǎng)關(guān)名稱。

  4. 在左側(cè)導(dǎo)航欄,單擊路由管理,然后選擇路由頁(yè)簽。

  5. 在需要變更的路由規(guī)則操作列,單擊策略配置

  6. 策略配置頁(yè)簽,單擊認(rèn)證。配置完成后,單擊保存

    參數(shù)

    描述

    認(rèn)證方式

    當(dāng)前路由認(rèn)證消費(fèi)者時(shí)使用的認(rèn)證方式。

    開啟狀態(tài)

    開啟后,認(rèn)證鑒權(quán)生效。

授權(quán)給消費(fèi)者

  1. 登錄MSE網(wǎng)關(guān)管理控制臺(tái),并在頂部菜單欄選擇地域。

  2. 在左側(cè)導(dǎo)航欄選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表

  3. 網(wǎng)關(guān)列表頁(yè)面,單擊目標(biāo)網(wǎng)關(guān)名稱。

  4. 在左側(cè)導(dǎo)航欄,單擊安全管理 > 消費(fèi)者鑒權(quán)

  5. 在需要變更的消費(fèi)者規(guī)則操作列單擊授權(quán)

  6. 消費(fèi)者授權(quán)頁(yè)簽,單擊關(guān)聯(lián)路由,選擇要授權(quán)給當(dāng)前消費(fèi)者的路由,然后單擊確定