一. 前言
關於必須使用HTTPS這個問題,很多朋友都在群里問到了,不過由於這個問題很簡單,一直也沒通過文章的方式記錄下來,今日有時間,便說說它的前因后果吧,給需要的人解惑~。
二. 問題發生
本文所使用代碼為 IdentityServer4 的 QuickStart2 的源代碼,文末會給出下載地址

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

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

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

2.啟動 API 項目

3.啟動 ResourceOwnerClient 項目
首先將該項目訪問 Ids4 的地址改為局域網地址:

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

關於
/.well-known/openid-configuration這個地址這里簡單提一下,這個是 OpenIdConnect 協議中定義的一個 EndPoint 用於獲取,其他 EndPoint 等信息。
下面我們介紹如何來解決。
三.問題解決
我們修改一下 ResourceOwnerClient 項目的代碼:

主要是這句代碼
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
