当前位置:首页 > 火币交易平台 > MASA Auth - SSO与Identity设计

MASA Auth - SSO与Identity设计

财掌柜中国3年前 (2022-07-22)火币交易平台267

AAAA

AAAA即认证、授权、审计、账号(Authentication、Authorization、Audit、Account)imtoken。在安全领域我们绕不开的两个问题:

授权过程可靠:让第三方程序能够访问所需资源又不泄露用户数据imtoken,常用的多方授权协议主要有 OAuth2 和 SAML 2.0

授权结果可控:授权结果用于功能或资源的访问控制imtoken。常见的权限控制模型:DAC、MAC、RBAC、ABAC 想了解权限控制模型的话可以参照上一篇的权限设计

OpenId(Authentication)

对于支持OpenID的网站,用户不需要记住像用户名和密码这样的传统验证标记imtoken。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(Identity Provider, IDP)的网站上注册。

对于支持OpenID的网站,用户不需要记住像用户名和密码这样的传统验证标记imtoken。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(Identity Provider, IDP)的网站上注册。

举个例子:MASA.Contrib使用codecov 来分析单元测试覆盖率imtoken,OAuth2帮我解决了几个安全问题:

密码泄露:不需要把账号密码告诉 codecov

访问范围:只开放读取源码的能力

权限回收:在Github上撤回授权即可关闭 codecov 的访问能力

那OAuth2是如何解决的呢

imtoken我们来看一张图

OIDC(Authentication & Authorization)

OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层imtoken。它允许客户端基于授权服务器执行的身份验证来验证终端用户的身份,并以一种可互操作的、类似rest的方式获取关于终端用户的基本概要信息。

展开全文

OIDC常用术语

EU:End User:终端用户

RP:Relying Partyimtoken,用来代指OAuth2中的受信任的客户端,身份认证和授权信息的消费方

OP:OpenID Providerimtoken,有能力提供EU认证的服务(比如OAuth2中的授权服务),用来为RP提供EU的身份认证信息

ID Token:JWT格式的数据imtoken,包含EU身份认证的信息

UserInfo Endpoint:用户信息接口(受OAuth2保护)imtoken,当RP使用Access Token访问时,返回授权用户的信息,此接口必须使用

OIDC工作流

JWT

JWT(JSON Web token)是一个开放的、行业标准的RFC 7519方法,用于在双方之间安全地表示声明imtoken。

JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)imtoken。在传输的时候,会将JWT的3部分分别进行Base64编码后用. 进行连接形成最终传输的字符串

JWT=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

JWT=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWTimtoken。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存

"alg": "HS256",

"typ": "JWT"

}Payload

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据(允许自定义)imtoken。

"sub": "1234567890",

"name": "John Doe",

"iat": 1516239022

}Signature

签名哈希部分是对上面两部分数据签名imtoken,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改

HMACSHA256(

base64UrlEncode(header) + "." +

base64UrlEncode(payload),

your-256-bit-secret

)Identity Server 4常用术语

Client:一个从 IdentityServer 请求令牌的软件——用于验证用户(请求身份令牌)或访问资源(请求访问令牌)imtoken。客户端必须先向 IdentityServer 注册,然后才能请求令牌

Allowed Scopes:即可以是Identity Resourceimtoken,也可以是Api Scopes和Api Resources

Resource:您希望使用 IdentityServer 保护的东西,如用户的身份数据或 APIimtoken。资源名称唯一

User Claims:需要包含在Access Token中的用户声明列表

API Resource Scope:API资源包含的作用域

API Properties:API本身的一些属性imtoken,例如name, display name, deion等

API Grants:被授权的API列表

User Claims:身份声明imtoken,例如sub,name,amr,auth_time等

Identity Properties:身份资源本身的一些属性imtoken,例如session_id,issued,expired等

Identity Grants:被授予的身份信息

API Scope:API作用域 可以当做是Permission来用imtoken,示例见: /

Identity Resource:关于用户的身份信息(又名声明)imtoken,例如姓名或电子邮件地址

API Resource:一组API Scope

Identity Token:身份令牌代表身份验证过程的结果imtoken。它至少包含用户的标识符以及有关用户如何以及何时进行身份验证的信息。它可以包含额外的身份数据

Access Token:访问令牌允许访问 API 资源imtoken。客户端请求访问令牌并将其转发到 API。访问令牌包含有关客户端和用户(如果存在)的信息。API 使用该信息来授权访问其数据

Grant Types:授权类型(其实还有Resource owner passwordimtoken,不推荐使用,就不过多介绍了) 参考自: /

Machine/Robot:Client Credentials

Web Applications:Authorization Code With PKCE(Proof Key for Code Exchange) 通常我们会选择 id_token token 作为response type 还有一个选择,就是Implicitimtoken。但在隐式流程中,所有令牌都通过浏览器传输,因此不允许刷新令牌等高级功能。作用范围就是仅用于用户身份验证(服务器端和 Java 应用程序),或身份验证和访问令牌请求(Java 应用程序)

SPA:Authorization Code With PKCE

Native/Mobile Apps:Authorization Code With PKCE

TV/Limited Input Device:Device Flow RFC 8628

Allowed Scopes:即可以是Identity Resourceimtoken,也可以是Api Scopes和Api Resources

User Claims:需要包含在Access Token中的用户声明列表

API Resource Scope:API资源包含的作用域

API Properties:API本身的一些属性imtoken,例如name, display name, deion等

API Grants:被授权的API列表

User Claims:身份声明imtoken,例如sub,name,amr,auth_time等

Identity Properties:身份资源本身的一些属性imtoken,例如session_id,issued,expired等

Identity Grants:被授予的身份信息

API Scope:API作用域 可以当做是Permission来用imtoken,示例见: /

Identity Resource:关于用户的身份信息(又名声明)imtoken,例如姓名或电子邮件地址

API Resource:一组API Scope

Machine/Robot:Client Credentials

Web Applications:Authorization Code With PKCE(Proof Key for Code Exchange) 通常我们会选择 id_token token 作为response type 还有一个选择,就是Implicitimtoken。但在隐式流程中,所有令牌都通过浏览器传输,因此不允许刷新令牌等高级功能。作用范围就是仅用于用户身份验证(服务器端和 Java 应用程序),或身份验证和访问令牌请求(Java 应用程序)

SPA:Authorization Code With PKCE

Native/Mobile Apps:Authorization Code With PKCE

TV/Limited Input Device:Device Flow RFC 8628

User:用户

Action:操作imtoken,包括增删改查

User Role:用户角色

User Claim:用户声明

Role:角色

Action:操作imtoken,包括增删改查

Role Claim:角色声明

Claim:声明是一个名称值对,表示使用者是什么,而不是使用者可以做什么imtoken。基于声明的授权检查声明的值并允许基于该值的资源访问

Policy:策略

默认策略

回退策略

自定义授权属性

Require Role:要求角色

Require Claim:要求声明

Require Assertion:更复杂的可以通过要求断言来解决imtoken,它支持两个重载的Func(实际是一个,因为有一个是Task)

Requirements:基于 IAuthorizationRequirement 接口定义一个要求imtoken,判断要求要基于 AuthorizationHandler<T> 来实现对应的逻辑

Resource:资源

Imperative:官方翻译是命令式imtoken,可以对特定的资源进行授权策略处理

Action:操作imtoken,包括增删改查

User Role:用户角色

User Claim:用户声明

Action:操作imtoken,包括增删改查

Role Claim:角色声明

默认策略

回退策略

自定义授权属性

Require Role:要求角色

Require Claim:要求声明

Require Assertion:更复杂的可以通过要求断言来解决imtoken,它支持两个重载的Func(实际是一个,因为有一个是Task)

Requirements:基于 IAuthorizationRequirement 接口定义一个要求imtoken,判断要求要基于 AuthorizationHandler<T> 来实现对应的逻辑

Imperative:官方翻译是命令式imtoken,可以对特定的资源进行授权策略处理

集成RBAC

通过.Net Core Identity的User Claimns将User Role与Api Resource、Api Scope、Identity Resource相关联imtoken,可以在不同业务维度下获取到用户的角色

再配合ASP.Net Core Identity的Role或Policy进行资源授权判断来达到SSO与RBAC的业务落地

总结

本章节涉及到OIDC、ASP.Net Core Identity和RBAC三部分内容imtoken。首先OIDC的知识体系就比较庞大,需要根据比较完善的文档把概念都搞清楚以及为什么这么设计的原因,其次还要进行一些微调把OIDC、RBAC与ASP.Net Core Identity三者结合。可以看出依赖模型其实是个很粗的把各个环节串了起来,但实际落地过程中还免不了对依赖模型进行二次调整来满足不同业务的需求。后续等MASA Auth落地后会再出第三篇文章来回顾和还原实际落地过程。

(本文章不代表最终设计)

开源地址

MASA.BuildingBlocks:

MASA.Contrib:

MASA.Utils:

MASA.EShop:

MASA.Blazor:

如果你对我们的 MASA Framework 感兴趣imtoken,无论是代码贡献、使用、提 Issue,欢迎联系我们

扫描二维码推送至手机访问。

版权声明:本文由财掌柜中国发布,如需转载请注明出处。

本文链接:https://www.czgqygl.com/pt/702.html

分享给朋友:

“MASA Auth - SSO与Identity设计” 的相关文章

数字藏品流行 iBox链盒沦为「炒作场」

数字藏品流行 iBox链盒沦为「炒作场」

近几个月,在名为iBox链盒的数字藏品平台每一天都在上演着暴涨暴跌的戏码huobi。5月17日,iBox平台数字藏品全线下跌,多个图片式数藏系列跌幅超过70%,导致一众玩家亏损。一天后,这些藏品又掀起了30%-80%的上涨潮,而两天后,「熊市」又来了,iBox多数数字藏品都有5%-20%的跌幅。 有...

天津泰达城市发展39.85亿元私募项目状态更新为“已反馈”

天津泰达城市发展39.85亿元私募项目状态更新为“已反馈”

  乐居财经讯 张林霞 7月15日,天津泰达城市发展集团有限公司2022年面向专业投资者非公开发行公司债券项目状态更新为已反馈泰达币。   据悉,债券品种为私募,拟发行金额为39.85亿元,发行人为天津泰达城市发展集团有限公司,承销商/管理人为海通证券股份有限公司,中泰证券股份有限公司,项目状态更新...

对“NFT数字藏品”了解是什么?

对“NFT数字藏品”了解是什么?

当各家券商都开始展望2022年的市场发展趋势时,NFT这个概念,突如其来的在12月的A股市场上炸街nft。数据显示,截至目前啊,NFT市场的规模已超过200亿美元,占加密货币总市值的比重超1%,那么仅八月的第一周呢,NFT市场的总交易量就已达到了4.42亿美元,如果说2021年是大家公认的元宇宙元年...

元宇宙系统源码搭建,基于元宇宙进行游戏开发

元宇宙系统源码搭建,基于元宇宙进行游戏开发

近段时间以来,在互联网行业刮起了一股名为元宇宙的狂风,并衍生出了元宇宙游戏、元宇宙社交等概念元宇宙。元宇宙系统源码是将元宇宙概念应用与游戏的产物,可能会有人问,元宇宙系统源码该怎样实现,接下来就让我们分析一下。 元宇宙系统源码 一、元宇宙的概念 其实元宇宙这一概念,早在1992年的科幻小说《雪崩》中...

从宝马的“工业元宇宙”看“营销元宇宙”

从宝马的“工业元宇宙”看“营销元宇宙”

故事的开端要从宇宙的起源说起,不是物种起源的那个宇宙元宇宙。有个人在小说里创造了一个宇宙,有个电影把这个宇宙搬上了荧幕,有个叫扎克伯格的男人对这个宇宙上头了。 2021年,他将自己的商业帝国更名为这个宇宙—Mate Platforms,Inc.注意,Facebook还是叫Facebook,是Face...

英语教学:“我有事”才不是“Ihavethings”,千万不要乱用!

英语教学:“我有事”才不是“Ihavethings”,千万不要乱用!

人生有事,实属正常eth。不管你是真的有事需要忙,还是想找个借口拒绝邀请。不过“我有事”应该怎么翻译?千万不要说成“Ihavethings”,这种说法是非常中式的,虽然它不能表示我有事,不过真正的意思是我有东西;我拿点东西。 eth我有事的正确表达 这里的我有事,表示自己有点事去做,抽不开身,完整的...