標籤:resource 監聽 資源 必須 協議 url 代碼 conf setting
一. 前言
關於必須使用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
IdentityServer4實戰 - 必須使用HTTPS問題解析