我正在开发一种开放式银行软件,银行用户(也称为客户)必须允许第三方软件为银行帐户中的一个帐户调用银行服务,例如现金提取和交易查看(数量有限)。 要实施此方法,应使用OAuth协议。为了授予这些Web服务调用权限,定义了一些范围,例如提款许可服务的范围和查看交易服务的范围。 重要的是这些权限不应授予所有用户帐户。客户将在批准页面上看到其帐户列表。帐户应该是可选的。用户将允许第三方系统撤回或查看交易。如果第三方系统要求的范围包括现金提取,则还应在批准页面上为每个帐户包括金额。帐户清单及其金额范围吗?我们之前无法定义这些范围,因为每个用户都有一个不同的帐户。
如果帐户和金额不在范围内,在用户确认后如何在批准页面上保存和保存它们? 我更改了批准页面以显示解决此问题的帐户列表,然后尝试期望将这些帐户存储在Approval表中,但显然存储在ApprovalStoreUserApprovalHandler类中 updateAfterApproval方法仅过滤和存储参数列表中先前定义的范围
public AuthorizationRequest updateAfterApproval(AuthorizationRequest authorizationRequest,Authentication userauthentication) {
// Get the approved scopes
Set<String> requestedScopes = authorizationRequest.getScope();
Set<String> approvedScopes = new HashSet<String>();
Set<Approval> approvals = new HashSet<Approval>();
Date expiry = computeExpiry();
// Store the scopes that have been approved / denied
Map<String,String> approvalParameters = authorizationRequest.getapprovalParameters();
for (String requestedScope : requestedScopes) {
String approvalParameter = scopePrefix + requestedScope;
String value = approvalParameters.get(approvalParameter);
value = value == null ? "" : value.toLowerCase();
if ("true".equals(value) || value.startsWith("approve")) {
approvedScopes.add(requestedScope);
approvals.add(new Approval(userauthentication.getName(),authorizationRequest.getclientId(),requestedScope,expiry,ApprovalStatus.APPROVED));
}
else {
approvals.add(new Approval(userauthentication.getName(),ApprovalStatus.DENIED));
}
}
approvalStore.addApprovals(approvals);
boolean approved;
authorizationRequest.setScope(approvedScopes);
if (approvedScopes.isEmpty() && !requestedScopes.isEmpty()) {
approved = false;
}
else {
approved = true;
}
authorizationRequest.setapproved(approved);
return authorizationRequest;
}
我想到的一种方法是自定义UserApprovalHandler以保存所有范围。我想我可能完全误解了这个概念