IdentityServer4 手動驗籤及日誌記錄

2022-09-14 15:36:28 字數 2563 閱讀 3670

identityserver4的基礎知識和使用方式網上有很多特別優秀的文章,如果有對其不了解的推薦閱讀一下下面的兩篇文章

當然如果你英文可以的話,官方文件還是要讀上一讀的。

如果是在.net core的api中,token校驗的實現方式是相當簡單的:

services.addauthentication("bearer")

.addjwtbearer("bearer", options =>

);

可以同過實現jwtbearerevents介面,來記錄token校驗過程的相關日誌。token校驗失敗api返回401。

但是如果不想要返回401呢,或者在是.net framework中同樣使用identityserver4,就需要我們手動實現token的校驗

net framework

if (header.authorization == null || header.authorization.parameter == null)

string tokenstr = header.authorization.parameter;

net core

if (header == null || !header.containskey("authorization"))

result = new openapiresponse(codeenum.notexisttoken, "not exit token");

else

string tokenstr = header["authorization"];

internal tokenmodel gettokenmodel(string jwttoken);}

catch (exception ex)

}

.獲取token配置:授權位址+.well-known/openid-configuration

.獲取token配置:根據上一步返回的jwks_uri,請求:jwks_uri,返回的結果如下:

]}

至此,乙個最基礎的token校驗就完成了,當然後面仍需要判斷token的超時時間及許可權等資訊

為了防止網路耗時引起的時間誤差,我預留了30秒的時間

datetime dtstart = timehelper.convertlongtodatetime(tokenmodel.plyload.nbf).addseconds(-30);

if (dtstart > datetime.now)

datetime dtend = timehelper.convertlongtodatetime(tokenmodel.plyload.exp).addseconds(30);

if (dtend < datetime.now)

if (!tokenmodel.plyload.scope.contains(_options.audience))

授權的日誌可通過實現ieventsink監聽相關事件,需要設定相關的eventsoptions為true

services.tryaddtransient();

var migrationsassembly = typeof(startup).gettypeinfo().assembly.getname().name;

services.addidentityserver(o =>

)

eventsink:

public class seqeventsink : ieventsink

; if (evt is apiauthenticationsuccessevent)

else if (evt is clientauthenticationsuccessevent)

else if (evt is consentgrantedevent)

else if (evt is invalidclientconfigurationevent)

else if (evt is tokenissuedfailureevent)

else if (evt is tokenissuedsuccessevent)

int ielid = addiel(iel);

var jsondata = jsonconvert.serializeobject(evt);

addxie(new xidentityeventlog() );

}catch (exception ex)

, details: ", evt.name, evt);

}});

}private int addiel(bidentityeventlog model)

private int addxie(xidentityeventlog model)

}

Identity Server4學習筆記

學習參考資料 博文 學習前的預備知識 oauth 2.0 的乙個簡單解釋 和 oauth 2.0 的四種方式 這個博主的文非常適合做課後總結 因為以上的博文其實已經很詳細了,我也就記一下學習過程中老是誤解的部分。oauth 2.0是乙個委託協議,它可以讓那些控制資源的人允許某個應用以代表他們來訪問他...

授權認證(IdentityServer4

區別 openid authentication 認證 oauth aurhorize 授權 輸入賬號密碼,qq確認輸入了正確的賬號密碼可以登入 認證 下面需要勾選的核取方塊 獲取暱稱 頭像 性別 授權 openid 當你需要訪問a 的時候,a 要求你輸入你的openid,即可跳轉到你的openid...

Identity Server4學習系列一

一 前言 這是官方文件的位址 二 簡介 1 常見的 的互動方式如下 1 瀏覽器與web應用程式互動。單站點應用程式,乙個站點搞定所有的東西,常見的有mvc webform等等,這類一般不存在多客戶端之說,因為頁面和後台處理程式是強耦合的,也就是說,這個時候我們的後台處理程式只處理對應的頁面,不能給其...