日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权...

發(fā)布時間:2023/12/4 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Oauth2授權(quán),熟悉微信開發(fā)的同學對這個東西應(yīng)該不陌生吧。當我們的應(yīng)用系統(tǒng)需要集成第三方授權(quán)時一般都會做oauth集成,今天就來看看在Dapr的語境下我們?nèi)绾蝺H通過配置無需修改應(yīng)用程序的方式讓第三方服務(wù)保護我們的API應(yīng)用。

目錄:

一、通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)

二、通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(二)——通訊框架講解

三、通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(三)——一步一步教你如何擼Dapr

四、通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(四)——一步一步教你如何擼Dapr之訂閱發(fā)布

通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(五)——一步一步教你如何擼Dapr之狀態(tài)管理

通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(六)——一步一步教你如何擼Dapr之Actor服務(wù)

通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(七)——一步一步教你如何擼Dapr之服務(wù)限流

通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(八)——一步一步教你如何擼Dapr之鏈路追蹤

Dapr目前支持兩種Oauth2授權(quán),一種是用戶認證模式,一種是客戶端憑據(jù)模式。今天的演示主要是通過集成github用戶認證的模式來實現(xiàn)相關(guān)功能,先上流程圖:

  流程圖畫的比較簡單,而且這里隱藏了dapr相關(guān)的細節(jié),下面我們詳細看看到底發(fā)生了什么:

  1、首先訪問者通過客戶端發(fā)起一個對鑒權(quán)服務(wù)的訪問,sidecar檢測到此次訪問沒有對應(yīng)cookie則會發(fā)起一個重定向到github的302請求。

  2、客戶端檢測到302后會重定向到github,github會展示一個登錄頁面并提示訪問者登錄并授權(quán)給應(yīng)用使用相關(guān)能力(如獲取用戶信息),授權(quán)完成后github帶上code并發(fā)起一個302重定向回到我們提前錄入好的回調(diào)地址,該地址實際上也是指向我們的鑒權(quán)服務(wù)。

  3、鑒權(quán)服務(wù)的sidecar拿到對應(yīng)code后會再次請求github拿到accesstoken并通過header的方式將該accesstoken返回給應(yīng)用。

  4、應(yīng)用拿到accesstoken后就可以訪問github公開的api獲取訪問者授權(quán)部分的功能。

  基本邏輯如上,下面我們看看如何集成github,首先我們需要登錄github創(chuàng)建一個對應(yīng)的應(yīng)用:

  登錄你的github賬號,并在右上角賬號頭像上點擊進入setting,進入設(shè)置頁面后在左側(cè)菜單欄選擇“Developer settings”并選擇二級菜單“OAuth Apps”,在這里我們需要創(chuàng)建一個應(yīng)用,創(chuàng)建應(yīng)用比較簡單,這里唯一需要注意的是Authorization callback URL這一欄需要輸入授權(quán)地址。不過創(chuàng)建時可以隨意填寫一個地址,等后續(xù)授權(quán)服務(wù)上線后再修改這里的回調(diào)地址即可。創(chuàng)建完成后我們可以進入detail拿到兩個關(guān)鍵配置Client ID、Client secrets。

  接著我們創(chuàng)建對應(yīng)的Component并錄入剛才拿到的Client ID、Client secrets:注意這里的redirectURL如果填了的話,跳轉(zhuǎn)會按照這里填寫的地址跳轉(zhuǎn),否則按照應(yīng)用上預(yù)設(shè)的地址跳轉(zhuǎn),我這里留空。另外authHeaderName是我們告訴daprd回調(diào)拿到的accesstoken的header名字自定義為“myauth”,否則會使用默認的關(guān)鍵字“authorization”,如果你不想占用該關(guān)鍵字則可以聲明一個自定義headername。

apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: githubauthnamespace: dapreshop spec:type: middleware.http.oauth2version: v1metadata:- name: clientIdvalue: "your client id"- name: clientSecretvalue: "your client secret"- name: scopesvalue: "user:email"- name: authURLvalue: "https://github.com/login/oauth/authorize"- name: tokenURLvalue: "https://github.com/login/oauth/access_token"- name: redirectURLvalue: ""- name: authHeaderNamevalue: "myauth"

  接著我們申明一個Configuration并注入到鑒權(quán)服務(wù)中(注入部分參考之前的限流)

apiVersion: dapr.io/v1alpha1 kind: Configuration metadata:name: appconfignamespace: dapreshop spec:httpPipeline:handlers:- name: githubauthtype: middleware.http.oauth2

  接著我們在eshop-sample上創(chuàng)建一個鑒權(quán)服務(wù)并創(chuàng)建一個service,該service主要是獲取到“myauth”之后向github發(fā)起請求訪問其user接口獲取之前授權(quán)訪問者的基本用戶信息用于創(chuàng)建默認的商城管理員。獲取信息后會將user信息打包到cookie并通過302的方式回寫到admin.dapreshop.com方便創(chuàng)建用戶。

[RemoteService("oauthservice", "github", "github授權(quán)服務(wù)")]public interface IService{[RemoteFunc(funcDescription: "請求OAUTH登錄")]Task<Model> GetUserInfo();}public class Service: IService{private readonly IHttpClientFactory httpClientFactory;public Service(IHttpClientFactory httpClientFactory){{this.httpClientFactory = httpClientFactory;}public async Task<Model> GetUserInfo(){var model = new Model() { login = "" };if (HttpContextExt.Current.Headers.Any(x => x.Key.ToLower().Equals("myauth"))){var req = new HttpRequestMessage();req.Headers.Add("User-Agent", "dapr-eshop");req.Headers.Add("Authorization", HttpContextExt.Current.Headers.FirstOrDefault(x => x.Key.ToLower().Equals("myauth")).Value);req.Method = HttpMethod.Get;req.RequestUri = new Uri("https://api.github.com/user");var result = await httpClientFactory.CreateClient().SendAsync(req);if (result.IsSuccessStatusCode){var content = await result.Content.ReadAsStringAsync();HttpContextExt.Current.Response.Cookies.Append("githubuser", JsonSerializer.Serialize(JsonSerializer.Deserialize<Model>(content)),new Microsoft.AspNetCore.Http.CookieOptions() { Domain = "dapreshop.com" });HttpContextExt.Current.Response.Redirect("http://admin.dapreshop.com:30882");}}return model;}}

  接著我們改造一下AccountUseCaseService的InitRoleBasedAccessControler這個方法,如果獲取到從頁面回調(diào)的cookie,則直接用cookie創(chuàng)建初始管理員,否則用默認值創(chuàng)建初始管理員(代碼略,具體看github對應(yīng)的repo)

  由于oauth會涉及到多次302重定向,我之前預(yù)設(shè)的簡易反代網(wǎng)關(guān)暫時走不通這個邏輯,所以這里我們直接將授權(quán)服務(wù)的dapr service暴露到ingress:(補充一個小知識,所有開啟了dapr的應(yīng)用都會創(chuàng)建一個“你的應(yīng)用名-dapr”的service,通過該service可以直接訪問sidecar)

apiVersion: networking.k8s.io/v1 kind: Ingress metadata:namespace: dapreshopname: oauthannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/enable-cors: "true"nginx.ingress.kubernetes.io/cors-allow-origin: 'http://admin.dapreshop.com:30882'nginx.ingress.kubernetes.io/cors-allow-headers: 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authentication,AuthIgnore' spec:rules:- host: oauth.dapreshop.comhttp:paths:- path: /pathType: Prefixbackend:service:name: oauthservice-daprport:number: 80

  照例將127.0.0.1 oauth.dapreshop.com 錄入host文件。接著我們回到github應(yīng)用,將回調(diào)地址錄入:http://oauth.dapreshop.com:30882/v1.0/invoke/oauthservice/method/github/GetUser 保存

  最后我們在admin.dapreshop.com的前端頁面增加一個跳轉(zhuǎn)到github的圖標,并將地址設(shè)置為“http://oauth.dapreshop.com:30882/v1.0/invoke/oauthservice/method/github/GetUser”,這樣點擊時即可進行oauth鑒權(quán)校驗:

?  一切就緒,啟動我們的電商demo,進入admin.dapreshop.com后,取消點擊初始化,點擊github小圖標,會跳轉(zhuǎn)到github授權(quán)頁面

  登錄后會回跳到我們的oauth服務(wù)的GetUserInfo方法,并通過該方法拿到user并回寫到cookie中,此時再點擊初始化,則會根據(jù)github賬號創(chuàng)建對應(yīng)的超管

?  整個流程就完畢了,大家可以clone最新的demo并嘗試一下~? 新增的幾個配置在Oxygen-Dapr.EshopSample\Deploy\middleware文件夾中

相關(guān)文章:

  • Dapr能否引領(lǐng)云原生中間件的未來?

  • 云原生 | 阿里巴巴的Dapr實踐與探索

  • Dapr | 云原生的抽象與實現(xiàn)

  • Dapr 可視化指南

  • Dapr 知多少 | 分布式應(yīng)用運行時

  • Dapr 正式發(fā)布 1.0

  • Dapr 交通流量控制示例

  • Dapr是如何簡化微服務(wù)的開發(fā)和部署

  • 微軟開源微服務(wù)運行時Dapr,賦能云原生應(yīng)用開發(fā)

  • YARP實現(xiàn)Dapr服務(wù)調(diào)用的反向代理

  • Dapr微服務(wù)應(yīng)用開發(fā)系列0:概述

  • Dapr微服務(wù)應(yīng)用開發(fā)系列1:環(huán)境配置

  • Dapr微服務(wù)應(yīng)用開發(fā)系列2:Hello World與SDK初接觸

  • Dapr微服務(wù)應(yīng)用開發(fā)系列3:服務(wù)調(diào)用構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列4:狀態(tài)管理構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列5:發(fā)布訂閱構(gòu)建塊

  • Windows環(huán)境下Dapr入門

  • 云原生 | .NET 5 with Dapr 初體驗

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(二)——通訊框架講解

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(三)——一步一步教你如何擼Dapr

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(四)——一步一步教你如何擼Dapr之訂閱發(fā)布

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(五)——一步一步教你如何擼Dapr之狀態(tài)管理

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(六)——一步一步教你如何擼Dapr之Actor服務(wù)

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(七)——一步一步教你如何擼Dapr之服務(wù)限流

  • 通過Dapr實現(xiàn)一個簡單的基于.net的微服務(wù)電商系統(tǒng)(八)——一步一步教你如何擼Dapr之鏈路追蹤

  • WebAssembly + Dapr = 下一代云原生運行時?

  • dapr 應(yīng)用開發(fā) | 環(huán)境配置

  • 乘風破浪,.Net Core遇見Dapr,為云原生而生的分布式應(yīng)用運行時

總結(jié)

以上是生活随笔為你收集整理的通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。