2

我正在开发一种开放式银行软件,银行用户(也称为客户)必须允许第三方软件以有限的金额调用银行服务,例如提取现金和查看他的一个帐户的交易。要实现此方法,应使用 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(), authorizationRequest.getClientId(),
                            requestedScope, expiry, 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 来保存所有范围。我想我可能完全误解了这个概念

4

0 回答 0