IdentityServer4實戰 - 必須使用HTTPS問題解析


一. 前言

關於必須使用HTTPS這個問題,很多朋友都在群里問到了,不過由於這個問題很簡單,一直也沒通過文章的方式記錄下來,今日有時間,便說說它的前因后果吧,給需要的人解惑~。

二. 問題發生

本文所使用代碼為 IdentityServer4 的 QuickStart2 的源代碼,文末會給出下載地址

1536152285572

1.修改 QuickstartIdentityServer 項目監聽地址

該項目默認監聽 localhost ,我們需要改變,讓我們通過局域網IP也能訪問(后文解釋)。打開 launchSettings.json 修改 applicationUrl ,如下圖:

1536152836540

然后啟動 QuickstartIdentityServer,出現下圖所示則表示修改正確 :

1536152884619

打開瀏覽器,通過局域網ip(我的局域網ip是:192.168.0.102)訪問,確保我們能成功訪問。

1536152981815

2.啟動 API 項目

1536153057964

3.啟動 ResourceOwnerClient 項目

首先將該項目訪問 Ids4 的地址改為局域網地址:

1536153157867

然后啟動,可以看到報錯了,提示必須使用 HTTPS。

1536153221851

關於 /.well-known/openid-configuration 這個地址這里簡單提一下,這個是 OpenIdConnect 協議中定義的一個 EndPoint 用於獲取,其他 EndPoint 等信息。

下面我們介紹如何來解決。

三.問題解決

我們修改一下 ResourceOwnerClient 項目的代碼:

1536153638525

主要是這句代碼

var discoveryClient = new DiscoveryClient(ids4Url) {Policy = {RequireHttps = false}};

我們通過設置 RequireHttps 屬性為 false 來關閉對 Ids4 地址HTTS的驗證。

必須使用HTTPS這個問題,很多人都是部署到生產環境才發生的,因為生產環境很多情況下不會用 localhost作為 IdentityServer4(后文簡稱 Ids4) 的地址,這個問題並不是 Ids4 引起的,而是我們使用的 IdentityModel 這個組件引起的,它默認限制了當 Ids4 非 localhost 地址時,必須啟用HTTPS。

四.資源

項目所用代碼:https://github.com/stulzq/IdentityServer4.Samples/tree/master/Practice/04_HTTPS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM