怎么把网站做的更好,有一个网站是做釆购的是什么网,推销商务网站的途径有哪些,做阿里巴巴网站电话本博客地址#xff1a;https://security.blog.csdn.net/article/details/130152887
一、认证服务
1.1、基于JWT的认证
在微服务架构下#xff0c;每个服务是无状态的#xff0c;由于服务端需要存储客户端的登录状态#xff0c;因此传统的session认证方式在微服务中不再适…本博客地址https://security.blog.csdn.net/article/details/130152887
一、认证服务
1.1、基于JWT的认证
在微服务架构下每个服务是无状态的由于服务端需要存储客户端的登录状态因此传统的session认证方式在微服务中不再适用。理想的实现方式应为无状态登录流程通常如下
1、客户端请求某服务服务端对用户进行登录认证。 2、认证通过服务端将用户登录信息进行加密并形成令牌最后再返回至客户端作为登录凭证。 3、在步骤2之后客户端每次请求都须携带认证的令牌。 4、服务端对令牌进行解密判断是否有效若有效则认证通过否则返回失败信息。
可通过JWT实现无状态登录JWT是JSON风格轻量级认证和授权规范也就是上述流程中提到的令牌它主要用于分布式场景需要注意的是JWT令牌中会包含用户敏感信息为防止被绕过JWT令牌采用了签名机制。此外传输时需要使用加密协议。
1.2、基于Istio的认证
Istio的基础知识可以参考此前写的一篇博文https://security.blog.csdn.net/article/details/128449214
Istio主要有两种认证类型传输认证、请求级认证
1、传输认证
传输认证是Istio的一种认证类型其主要用于微服务应用架构中服务到服务的认证从而可验证所连接的客户端。针对此类型的认证Istio提供了双向TLS的解决方案该解决方案提供以下功能
1、确保服务到服务间的通信安全。 2、提供密钥管理系统从而自动进行密钥及证书的生成、分发和轮换。 3、为每个服务提供一个代表其角色的身份从而实现跨集群的互操作性。
具体地我们可以通过使用传输认证策略为Istio中的服务指定认证要求如命名空间级别TLS认证策略可以指定某命名空间下所有的Pod间的访问均使用TLS加密、Pod级别TLS认证策略可以指定某具体Pod被访问时需要进行TLS加密等。
2、请求级认证
请求级认证是Istio的一种认证类型主要用于对终端用户的认证与传输认证的主要区别为请求级认证主要用于验证用户请求服务时携带的凭据而非服务到服务的认证。
请求级认证主要通过JWT机制实现。相比于传统Session认证方法的最大区别在于认证信息保存在客户端由于不再将认证信息存储在服务端因此非常适用于无状态的微服务场景并达到了易于扩展的目的。
Istio的JWT认证主要依赖于JWKSJWKS是一组密钥集合其中包含用于验证JWT的公钥在实际应用场景中运维人员通过为服务部署JWT认证策略实现请求级认证。
下面展示了JWT认证策略的核心部分配置
// issuer代表发布JWT的发行者
issuer: https://example.com
// jwksUriJWKS获取的地址本地或远程均可用于验证JWT的签名
jwksUri: https://example.com/.well-known/jwks.json
// triggerRulestriggerRules为使用JWT验证请求的规则触发列表如果满足匹配规则就进行JWT验证
triggerRules:
- excludedPaths:// 对于任何带有/status/前缀的请求路径除了/status/version以外都需要JWT认证- exact: /status/versionincludedPaths:- prefix: /status/当JWT认证策略部署完成后外部对某服务有新的请求时请求级认证会根据策略内容验证请求携带的令牌Token若与策略内容匹配则返回认证失败反之认证成功。
二、基于Istio的访问控制
2.1、Istio授权
Istio授权流程可以归纳总结为以下内容
Administrator使用yaml文件指定Istio授权策略并将其部署至Istiod核心组件中Istiod通过API Server组件监测授权策略变更若有更改则获取新的策略Istiod将授权策略下发至服务的Sidecar代理每个Sidecar代理均包含一个授权引擎在引擎运行时对请求进行授权。
如图所示 举一个Istio授权策略的例子
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:name: httpbin-policynamespace: foo
spec:selector:matchLabels:app: httpbinaction: ALLOWrules:- from:- source:principals: [cluster.local/ns/default/sa/sleep]to:- operation:methods: [GET]paths: [/info*]when:- key: request.auth.claims[iss]values: [https://foo.com]这个授权策略的含义是筛选出foo这个namespace中含有app:httpbin这个标签的pod对发送到这些pod的请求进行匹配如果匹配成功则放行当前请求。
匹配规则如下发起请求的pod的Service Account需要是cluster.local/ns/default/sa/sleep请求使用HTTP协议请求的具体方法类型是GET请求的URL为/info*并且请求中需要包含由https://foo.com签发的有效的JWT Token。
从这个例子中可以看出一个授权策略主要包含以下几个部分
name授权策略的名称仅用于标识授权策略本身不会影响规则的匹配和执行 namespace当前策略对象所在的namespace可以使用这个字段配置不同作用范围的授权策略 selector使用label来选择当前授权策略作用于哪些pod上。注意这里设置的是服务端的pod因为最终这些规则会转换为Envoy规则由服务端的Envoy Porxy来具体执行 action可以为ALLOW默认值或者DENY rules匹配规则如果匹配成功就会执行对应的action
2.2、授权策略的匹配算法
针对某一个请求会按照一定的匹配算法来执行相应的授权策略
1、如果有任何一条 DENY 授权策略匹配当前请求则拒绝当前请求 2、针对当前 pod如果没有任何 ALLOW 授权策略则放行当前请求 3、如果有任何一条 ALLOW 授权策略匹配当前请求则放行当前请求 4、拒绝当前请求
也就意味着如果同时有 ALLOW 和 DENY 策略作用于同一个 pod 上则 DENY 策略会优先执行其它的 ALLOW 规则就会被忽略。