一、簡介
IdentityServer4(ids4)是用於ASP.NET Core的OpenID Connect和OAuth 2.0框架。在許多成熟的.net core框架中都完美的集成的該身份服務框架,用於提供單一的身份授權服務和簡單的配置。ids4十分適用於分布式和微服務系統的身份驗證,本篇就介紹一下ids4在微服務框架中如何獲取token和userInfo。
二、開始前
ids4提供的token默認JWT格式,.net core中也對JWT做了完美支持。這里不建議大家自己在項目中集成ids4框架,最好選擇abp、abp vNext框架或ids4 demo進行試驗。abp和abp vNext框架中都對ids4和JWT做了完美的集成。特別是abp vNext微服務框架,該框架不僅對ids4和ocelot等框架進行了集成,還將微服務的身份驗證進行了統一的授權,並做了單一的授權服務可對外提供open id。推薦abp框架的目的是可以免去學習.net core身份機制和IdentityServer4框架的痛苦,目前關於ids4的踩坑資料並不多,所以如果個人去集成ids4框架是存在不少風險的。
三、獲取token
ids4 提供的令牌端點:
POST /connect/token client_id=client1& client_secret=secret& grant_type=authorization_code& code=hdh922& redirect_uri=https://myapp.com/callback
上面只是獲取token的示例,實際開發中不會這樣配置。
我的示例使用的是abp vNext微服務中的授權服務,並沒有在.net core中單獨集成ids4 和JWT。示例中我會對client_id和grant_type做新的配置,方便大家實際體驗。
step1:添加client_id
ids4官方有提供Admin UI管理,但是價格昂貴就不考慮了。深度使用的話可以基於ids4提供的ef core程序集進行身份管理開發,abp vNext中似乎對ids4進行了身份管理開發,但是接口並未發布。如果只是簡單身份配置的話建議在abp vNext授權服務的種子文件中進行身份添加然后使用ef core還原到數據庫。不想去折騰abp vNext微服務框架,直接修改數據庫也是可以的。
step2:配置client_id發放token方式(ClientGrantType)
ids4提供的token發放方式有多種,web開發中使用password方式發放token。
step3:配置client加密(ClientSecret)
ids4基於client發放token,所以獲取token也需要提供client密碼。
以上配置均可以在abp vNext授權服務種子文件中進行添加。直接修改數據庫需要對ids4數據庫中的以下表進行先后修改:IdentityServerClients、IdentityServerClientGrantTypes、IdentityServerClientSecrets
step4:獲取token
啟動服務后使用postman獲取token參數如下:

token:

四、獲取userInfo
ids4提供了便捷的userInfo獲取方式,用於其他系統獲取用戶信息。
step1:配置openid
使用abp vNext授權服務ids4種子文件可以直接配置openid,直接修改數據庫需要在ids4數據庫的IdentityServerClientScopes表中進行配置。
step2:獲取userInfo
使用postman獲取userInfo參數如下:

userInfo:

userInfo輸出了用戶id和姓名,配置openid信息在IdentityServerIdentityClaims表中。
五、總結
identity server4獲取token和userInfo的方式介紹完了,強烈推薦使用abp框架研究配置和應用ids4,喜歡折騰的朋友也可以參考ids4官方demo。ids4框架十分強大復雜,筆者不推薦從頭學習,個人應該以學習如何配置和應用為主。后續我會介紹更多ids4的使用技巧和ids4在微服務中的應用,喜歡的朋友可以持續關注下。。。
