1. 程式人生 > >ABP從入門到精通(4):使用基於JWT標準的Token訪問WebApi

ABP從入門到精通(4):使用基於JWT標準的Token訪問WebApi

專案:asp.net zero 4.2.0 .net core(1.1) 版本

我們做專案的時候可能會遇到需要提供api給app呼叫,ABP動態生成的WebApi提供了方便的基於JWT標準的Token訪問方式供我們訪問API,不用在程式碼上做任何改動,很方便有木有!

一.什麼是JWT

Json web token (JWT), 是為了在網路應用環境間傳遞宣告而執行的一種基於JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用於分散式站點的單點登入(SSO)場景。JWT的宣告一般被用來在身份提供者和服務提供者間傳遞被認證的使用者身份資訊,以便於從資源伺服器獲取資源,也可以增加一些額外的其它業務邏輯所必須的宣告資訊,該token也可直接被用於認證,也可被加密。

這裡就不詳細介紹JWT了,JWT的詳細介紹可以檢視這篇文章,寫得非常詳細: JWT【JSON Web Token】 簡述

二.ABP的WebApi訪問控制

asp.net zero core是通過IdentityServer4來實現的認證、授權,關於IdentityServer4介紹可以檢視我前面的博文 ASP.NET Core身份認證服務框架IdentityServer4-整體介紹

下面我簡單畫了一張圖來表示流程,其中API訪問認證就是有IdentityServer4來實現的,主要有兩種認證方式,一種是通過Cookie主要用於通過瀏覽器訪問,一種是通過Token訪問,主要用於APP、或者其他服務訪問。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

三.申請Token

http://localhost:4999 專案地址

ABP已經為我們實現好了Token獲取和驗證。

需要注意的是配置ServerRootAddress,如下圖

0?wx_fmt=png

1.首先執行webapi專案(asp.net zero core專案說明)

訪問地址 http://localhost:4999/api/TokenAuth/Authenticate 申請Token,提交引數:使用者名稱、密碼

{    "userNameOrEmailAddress":"admin",    "password":"123456"}

0?wx_fmt=png

返回結果:

0?wx_fmt=png

 1 { 
2
"result
": {
3
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiODJkOTQ3M2EtMGE0Yy00MWZhLWI4ZDMtMzUzODJkMjJkOGFmIiwiaWF0IjoxNTAzNDY4NjM2LCJuYmYiOjE1MDM0Njg2MzYsImV4cCI6MTUwMzU1NTAzNiwiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.DnqpCFB2hjeYtEKd-RnJe4i4DmZVfo7EVnTXjrE18oY", 4 "encryptedAccessToken": "wNYmO41/48SHNstaLVXxHCCre29BZQl1NhC6NM3R3rwZiL572M4gBaHf6sHsTGZfcntBdt0YdGxxOmZDW4iy5jqe38W4yYK8C/ZyrckjUp2HPGDmagvdis58EyNMpU3nSRtiAxQDeAI9GbjKTvJK8UALab3hu556RViMrW+sbfD6HYigjq8CLQVBA5R83I4MwVGFWK2UXTBm3s7vfMr3TB15clrtMORUi6LxUCXaN4osbXSmoPSqtypvEfD/jDFAiXbqJaeIO/bwImWsbtZdFngCPgn5qtJ0OMb6XEFCs8YoBsZk4eA5dUqw/aji2wGLFEp9jNiDyiJ32IRLd8/Jc6J2zqd/zq2V7T53Yd3wVN9EvzZQ433LHWxEIVdaZT4LZQdkSbnXLbGNsQ2NHDpCmfTlr020TknJiC7EvrhsIam9qluWnUJ1XQbHhV+QKpLGWKmDAYC6V83wmmZVe0nEy19Kyerds65dsF2TZDXLOfibnqAQ8l+hnxFG5g33bjuia3mV2QyaAJ0YjPORgNyeJRlJAruT22Pls9ydIwDJJGGIQ5WLP0LkFYgH15qsL0bnNSUxcjChQ8gyva+MkVJ6GS+SLEumyCa5gLA6PrSGkrnTd7ssDQskbvv/B2E4UbI2Mol/yLwmtmy4rIRVhZikz9HbuqZjuNyGbKhhLnb/ZOo=",
5
"expireInSeconds": 86400,
6
"shouldResetPassword": false,
7
"passwordResetCode": null,
8
"userId": 0,
9
"requiresTwoFactorVerification": false,
10 "twoFactorAuthProviders": null,
11 "twoFactorRememberClientToken": null,
12 "returnUrl": null
13    },    
14 "targetUrl": null,
15 "success": true,
16 "error": null,
17 "unAuthorizedRequest": false,
18 "__abp": true
19 }

其中 accessToken 就是我們申請的token。

四.使用Token訪問api

在請求頭中加入 Authorization, 值為'Bearer ' + token 中間有個空格,請注意

0?wx_fmt=png

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIiwibmFtZSI6ImFkbWluIiwiQXNwTmV0LklkZW50aXR5LlNlY3VyaXR5U3RhbXAiOiJhMGU5M2Q0Yi01ZDk3LTFiZDktMTRkYS0zOWUwOTk4ODVhOTgiLCJyb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiIxIiwianRpIjoiZWYzOGMzZDgtNzBkNC00YjkzLWFmNDAtMDYwZGJkNmI1YjEzIiwiaWF0IjoxNTAzNDY3NzUzLCJuYmYiOjE1MDM0Njc3NTMsImV4cCI6MTUwMzU1NDE1MywiaXNzIjoiQWJwWmVyb1RlbXBsYXRlIiwiYXVkIjoiQWJwWmVyb1RlbXBsYXRlIn0.yXV9BBWb2dxN_o8WFPWH8GrPjP2gn0FavhyCOMf3Gaw

返回結果:

0?wx_fmt=png

呼叫成功!

.NET Core 交流群:4656606

相關文章:

原文地址:http://www.cnblogs.com/stulzq/p/7417548.html

.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

640?wx_fmt=jpeg

相關推薦

ABP入門精通4 使用基於JWT標準Token訪問WebApi

                專案:asp.net zero 4.2.0 .net core(1.1) 版本 我們

ABP入門精通4使用基於JWT標準Token訪問WebApi

專案:asp.net zero 4.2.0 .net core(1.1) 版本 我們做專案的時候可能會遇到需要提供api給app呼叫,ABP動態生成的WebApi提供了方便的基於JWT標準的Token訪問方式供我們訪問API,不用在程式碼上做任何改動,很方便有木有! 一.什麼是JWT Json web t

arcgis jsapi介面入門系列4用程式碼在地圖畫點線面

PS:用程式碼畫點這樣寫是為了跟後面的用滑鼠畫點線面區分出來 畫點 drawPointGraphic: function () { //點有多種樣式:一般的點,顯示文字,顯示圖片 //一般的點

Asp.Net MVC4入門指南4新增一個模型

在本節中,您將新增一些類,這些類用於管理資料庫中的電影。這些類是ASP.NET MVC 應用程式中的"模型(Model)"。 您將使用.NET Framework 資料訪問技術Entity Framework,來定義和使用這些模型類。Entity Framework(通常稱為 EF) 是支援程式碼優先的開發

深度學習Deeplearning4j 入門實戰5基於多層感知機的Mnist壓縮以及在Spark實現

在上一篇部落格中,我們用基於RBM的的Deep AutoEncoder對Mnist資料集進行壓縮,應該說取得了不錯的效果。這裡,我們將神經網路這塊替換成傳統的全連線的前饋神經網路對Mnist資料集進行壓縮,看看兩者的效果有什麼異同。整個程式碼依然是利用Deeplearnin

API 限流器基於redis的API訪問頻率控制器的實現

 在open API日益盛行的今天,API的訪問頻率控制尤為重要。Google開源的Guava中有個類叫RateLimiter,但是此類控制粒度只是秒級別的,沒有提供分鐘,小時,天級別的限制,而且採取的是阻塞的模式,應用起來不是很方便。本人依據Redis的有序集合開發了一個訪

ABP入門精通6快速重新命名解決方案

SolutionRenamer SolutionRenamer 是一個解決方案快速重新命名工具。經測試重新命名一個全新asp.net zero core專案(ABP asp.net zero,.net core版本,版本號4.4.0),耗時大約在3s左右。 使用 這個zip

Logtail入門精通工作原理簡介

摘要: Logtail資料採集原理介紹,包括檔案採集原理以及外掛採集原理。 檔案採集原理 Logtail檔案採集的流程包括:檔案監聽、檔案讀取、日誌處理、日誌過濾、日誌聚合和資料傳送6個環節。下面將分別進行介紹: • 注意:本節只介紹正常執行模式中Logtail

TensorFlow 入門精通MNIST 例程原始碼分析

按照上節步驟, TensorFlow 預設安裝在 /usr/lib/python/site-packages/tensorflow/ (也有可能是 /usr/local/lib……)下,檢視目錄結構: # tree -d -L 3 /usr/lib/pyt

CUDA入門精通流並行

前面我們沒有講程式的結構,我想有些童鞋可能迫不及待想知道CUDA程式到底是怎麼一個執行過程。好的,這一節在介紹流之前,先把CUDA程式結構簡要說一下。 CUDA程式檔案字尾為.cu,有些編譯器可能不認識這個字尾的檔案,我們可以在VS2008的Tools->Opti

TensorFlow 入門精通使用 TensorFlow 實現 RNN

使用 TensorFlow 很大的一個原因是其對 RNN/LSTM 支援較好。作為理解 RNN/LSTM 基礎,建議閱讀經典文獻:以下為程式碼。# Copyright 2015 Google Inc. All Rights Reserved. # # Licensed und

Golang入門精通Golang控制語句之for

for結構介紹 Go語言只有for迴圈這一種迴圈結構。 基本的for迴圈包含三個由分號分開的組成部分: 1.初始化語句:在第一次迴圈執行前被執行 2.迴圈條件表示式:每輪迭代開始前被求值 3.後置語句:每輪迭代後被執行 初始化語句一般是一個短變數宣告

TensorFlow 入門精通安裝和使用

安裝過程 目前較為穩定的版本為 0.12,本文以此為例。其他版本請讀者自行甄別安裝步驟是否需要根據實際情況修改。 TensorFlow 支援以下幾種安裝方式: PIP 安裝 原始碼編譯安裝 Docker 映象安裝 PIP 安裝

CUDA入門精通環境搭建

NVIDIA於2006年推出CUDA(Compute Unified Devices Architecture),可以利用其推出的GPU進行通用計算,將平行計算從大型叢集擴充套件到了普通顯示卡,使得使用者只需要一臺帶有Geforce顯示卡的筆記本就能跑較大規模的並行處理程式

TensorFlow 入門精通tensorflow.nn 詳解

看過前面的例子,會發現實現深度神經網路需要使用 tensorflow.nn 這個核心模組。我們通過原始碼來一探究竟。 # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under th

Golang入門精通Golang陣列

陣列定義 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列(這是一種同構的資料結構);這種型別可以是任意的原始型別例如整形、字串或者自定義型別。陣列長度必須是一個常量表達式,並且必須是一個非負整數。需要強調:陣列長度也是陣列型別的一部分。 Go語

Golang入門精通Golang控制語句之switch

基本結構 相比較 C 和 Java 等其它語言而言,Go 語言中的 switch 結構使用上更加靈活。它接受任意形式的表示式,例如: switch var1 { case val1: ... case val2:

Java網路程式設計入門精通27關閉服務端連線

package server;import java.net.*;class Client {     public static void main(String[] args) throws Exception     {         Socket socket = new Socket("127.

Golang入門精通Golang函式

函式 函式是結構化程式設計中最小的模組單元,日常開發過程中,將複雜的演算法過程分解為若干個小任務(程式碼塊),使程式的結構性更清晰,程式可讀性提升,易於後期維護和讓別人讀懂你的程式碼。編寫多個函式的主要目的是將一個需要很多行程式碼的複雜問題分解為一系列簡單的任

ZED-Board入門精通軟硬體協同設計

Zynq最大的優勢在於,同時具備軟體、硬體、IO可程式設計,即All Programmable。在設計Zynq過程中,同樣要建立一種意識,就是從原來單純的軟體思維(或單純的硬體思維)中解脫,轉向軟硬體協同設計的開發方法。 軟體設計,即基於ARM的軟體開發,我們第三節裡面已