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

一. 前言

關於必須使用HTTPS這個問題,不少朋友都在羣裏問到了,不過因爲這個問題很簡單,一直也沒經過文章的方式記錄下來,今日有時間,便說說它的來龍去脈吧,給須要的人解惑~。git

二. 問題發生

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

1536152285572

1.修改 QuickstartIdentityServer 項目監聽地址

該項目默認監聽 localhost ,咱們須要改變,讓咱們經過局域網IP也能訪問(後文解釋)。打開 launchSettings.json 修改 applicationUrl ,以下圖:json

1536152836540

而後啓動 QuickstartIdentityServer,出現下圖所示則表示修改正確 :api

1536152884619

打開瀏覽器,經過局域網ip(個人局域網ip是:192.168.0.102)訪問,確保咱們能成功訪問。瀏覽器

1536152981815

2.啓動 API 項目

1536153057964

3.啓動 ResourceOwnerClient 項目

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

1536153157867

而後啓動,能夠看到報錯了,提示必須使用 HTTPS。ide

1536153221851

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

下面咱們介紹如何來解決。3d

三.問題解決

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

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

相關文章
相關標籤/搜索