搭建IdentityServer4

  • 参考:

https://www.bilibili.com/video/av22903368

准备用户相关库表

在搭建IdentityServer4之前,首先需要考虑用户库表的设计,这里直接采用 asp.net core identity 的库表。
首先要有安装MSSQL2012数据库,然后开始创建库表。用户库表可以通过在VS2017上创建项目的形式自动创建。
开启VS2017创建一个asp.net core Web应用程序(模型视图控制器),
注意点击【更改身份验证】,选择【个人用户帐号】。项目创建后修改配置文件 appsettings.json 中连接字符串:

Data Source=10.23.105.88,1433;Integrated Security=false;Initial Catalog=IdentityDB;User Id = sa;Password = password123;

运行项目,点击注册。

帐号:demo@qq.com ,密码 !1Demo

帐号注册成功,数据库中也相应的生成了库表。库表说明

调试IdentityServer4

官方提供了一个整合了 asp.net core identity 的IdentityServer4 Demo: https://github.com/IdentityServer/IdentityServer4.AspNetIdentity
克隆项目

git clone https://github.com/IdentityServer/IdentityServer4.AspNetIdentity

VS2017打开项目


项目视图

修改Host项目中的配置文件 appsettings.json中连接字符串,指向我们之前创建的数据库。启动项目,看下效果。


IdentityServer4

服务发现文档:

https://localhost:44334/.well-known/openid-configuration

服务发现数据:

{
    "issuer": "https://localhost:44334",
    "jwks_uri": "https://localhost:44334/.well-known/openid-configuration/jwks",
    "authorization_endpoint": "https://localhost:44334/connect/authorize",
    "token_endpoint": "https://localhost:44334/connect/token",
    "userinfo_endpoint": "https://localhost:44334/connect/userinfo",
    "end_session_endpoint": "https://localhost:44334/connect/endsession",
    "check_session_iframe": "https://localhost:44334/connect/checksession",
    "revocation_endpoint": "https://localhost:44334/connect/revocation",
    "introspection_endpoint": "https://localhost:44334/connect/introspect",
    "device_authorization_endpoint": "https://localhost:44334/connect/deviceauthorization",
    "frontchannel_logout_supported": true,
    "frontchannel_logout_session_supported": true,
    "backchannel_logout_supported": true,
    "backchannel_logout_session_supported": true,
    "scopes_supported": ["openid", "profile", "email", "custom.profile", "api1", "api2.full_access", "api2.read_only", "offline_access"],
    "claims_supported": ["sub", "name", "family_name", "given_name", "middle_name", "nickname", "preferred_username", "profile", "picture", "website", "gender", "birthdate", "zoneinfo", "locale", "updated_at", "email", "email_verified", "location"],
    "grant_types_supported": ["authorization_code", "client_credentials", "refresh_token", "implicit", "password", "urn:ietf:params:oauth:grant-type:device_code"],
    "response_types_supported": ["code", "token", "id_token", "id_token token", "code id_token", "code token", "code id_token token"],
    "response_modes_supported": ["form_post", "query", "fragment"],
    "token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post"],
    "subject_types_supported": ["public"],
    "id_token_signing_alg_values_supported": ["RS256"],
    "code_challenge_methods_supported": ["plain", "S256"]
}

IdentityServer4服务调用

上面已经能看到服务发现暴露出来的接口地址,但是没有文档还是不知道如何调用。先看下官方文档:docs.identityserver.io 。

首先来了解下 token endpoint:

"token_endpoint": "https://localhost:44334/connect/token",

Token节点服务 是采用编程的方式获得Token. 支持 password, authorization_code, client_credentials, refresh_token 等多种授权类型。

先来个授权方式为: client_credentials 的例子,该授权方式适合与没有用户参与的场景,无需用户输入帐号密码,比如编写了一个手机APP用于调用短信服务,手机APP是客户端,短信服务是被调用的服务,也可称之为资源服务,IdentityServer4用于向客户端颁发令牌(Token),手机APP发送HTTP请求时需要携带Token,短信服务接收到调用请求首先校验Token是否有效。
在继续往下讲之前,先了解两个概念:

  • Client : 在IdentityServer4配置的白名单,这样IdentityServer4才知道那些客户端允许访问它。
  • Scope 和 Resource
    Scope被构建为资源,只不过它是Resource的子集。
    Resource 可划分为 IdentityResource、APIResource

https://docs.identityserver.io 输入关键字查询

文档中搜索

在调用接口之前,需要配置下Client、和 Resource


内存中的配置文件
API资源

客户端

注册内存中的配置信息

运行项目Host,启动Postman进行测试


Postman截图
POST /connect/token HTTP/1.1
Host: localhost:44334
Cache-Control: no-cache
Postman-Token: 0d1877f4-5128-8457-f429-5b912a0a916e
Content-Type: application/x-www-form-urlencoded

client_id=oauthClient_MobileApp&client_secret=superSecretPassword&grant_type=client_credentials&scope=smsAPI.send

返回数据

{
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImQxMjcxNDRlNWRmN2JlNzU4OTA1OWY3YmI3OTY2NWRlIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NDY1MDcxNTEsImV4cCI6MTU0NjUxMDc1MSwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMzQiLCJhdWQiOlsiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMzQvcmVzb3VyY2VzIiwic21zQVBJIl0sImNsaWVudF9pZCI6Im9hdXRoQ2xpZW50X01vYmlsZUFwcCIsInNjb3BlIjpbInNtc0FQSS5zZW5kIl19.IHABbOWAHB864Ts7Ny5w6FSqUr_GW-R8q8otrdNsW08JGsIj0NImWk5hwfcU2Ycg3rcmuVCDSmYqc9f4wQbTwbpAvdalpQ6lAApnD7XODltKXZwF4zAI6Dei3NRs_-tMh5LqwT2zYJICYLDq26Hwyw3Jxh2l88xsMBxFs_xowwjmB7HAl-w_ks3vsHb8RqMZm9VPyFfsWTxhPDfvFHoRaDOtO_IUmr-CxrMebOyyqniVcmtXEW5LIpcnFZg-nGspGd0BBfnYVdCjR6DTNviGgvzDkJ6oikikM6DhBVG7DXC_sYT6Lbgh8HAsgzK062YVNP4wVjYX6EPDgH-PLoZQNA",
"expires_in": 3600,
"token_type": "Bearer"
}

返回的access_token 是JWT格式,解码才能阅读,这里推荐一个在线JWT解码的网站 https://jwt.io/

jwt.io
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容