1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
| # 现代身份认证系统
from datetime import datetime, timedelta
import secrets
class IdentityProvider:
"""身份提供商"""
def __init__(self):
self.sessions = {}
self.mfa_providers = {}
async def authenticate(self, credentials, context):
"""多因素认证"""
# 1. 验证身份
user = await self._verify_identity(credentials)
# 2. 检查设备健康
device_trust = await self._check_device_health(context['device_id'])
# 3. 评估上下文风险
risk_score = await self._assess_risk(context)
# 4. 决定认证要求
if risk_score > 0.7:
# 高风险:需要MFA
mfa_required = True
else:
mfa_required = False
# 5. 执行认证
if mfa_required:
mfa_result = await self._perform_mfa(user['id'])
if not mfa_result['success']:
raise AuthenticationException("MFA failed")
# 6. 颁发令牌
token = await self._issue_token(user, context)
return {
'access_token': token,
'expires_in': 3600,
'refresh_enabled': True
}
async def _issue_token(self, user, context):
"""颁发令牌"""
# JWT令牌
payload = {
'user_id': user['id'],
'roles': user['roles'],
'permissions': user['permissions'],
'device_id': context['device_id'],
'location': context['location'],
'iat': datetime.now().timestamp(),
'exp': (datetime.now() + timedelta(hours=1)).timestamp()
}
# 添加信任评分
trust_score = await self._calculate_trust_score(user, context)
payload['trust_score'] = trust_score
return self._encode_jwt(payload)
# 细粒度访问控制
class AccessControlEngine:
"""访问控制引擎"""
def __init__(self, policy_engine):
self.policy_engine = policy_engine
async def check_access(self, request):
"""检查访问权限"""
# 策略评估
decision = await self.policy_engine.evaluate({
'subject': request.subject,
'action': request.action,
'resource': request.resource,
'context': request.context
})
return decision['allow'], decision['reason']
# 策略定义示例
ABAC_POLICIES = [
{
"name": "Document Access Policy",
"conditions": {
"resource.type": "document",
"resource.classification": ["public", "internal", "confidential"],
"subject.roles": ["employee", "contractor", "partner"],
"context.location": ["office", "remote"],
"context.time": ["business_hours", "any"]
},
"rules": [
{
"effect": "allow",
"conditions": {
"resource.classification": "public",
"subject.roles": ["employee", "contractor", "partner"]
}
},
{
"effect": "allow",
"conditions": {
"resource.classification": "internal",
"subject.roles": ["employee"],
"context.location": ["office"]
}
},
{
"effect": "deny",
"conditions": {
"resource.classification": "confidential",
"subject.roles": ["contractor", "partner"]
}
}
]
}
]
|