gpt4 book ai didi

java - 针对外部 API 的 Spring 身份验证

转载 作者:行者123 更新时间:2023-12-01 11:02:47 25 4
gpt4 key购买 nike

我需要根据外部 API 对用户进行身份验证,我需要在其中传递用户名密码。该 API 是一个REST Web 服务,它将返回一个json 对象。现在我需要提取“auth_token”(json 中的元素)并将其设置在用户上下文中以供进一步请求因为其他请求需要将此 auth_token 设置到 header 中 。我们这边不需要写认证逻辑。所有登录逻辑都在 API 端处理。返回的 JSON 对象如下所示:

{
"success" : true,
"auth_token" : "a2xvv-mqe_sV_Lhsggkd3Q",
"email" : "****.***@***.com",
"role" : "admin",
"time_zone" : "Mumbai",
"user_key" : "b3222tf92d",
"sign_in_count" : 208,
"organisation" : {
"name" : null,
"organisation_key" : null,
"license" : {
"license_key" : "tebde23823t5a76828e2et8683fd3b33e2eat5fb"
}
}
}

如何在spring security中实现这个功能。如果可能的话,如果您为我提供带有示例的步骤,那将是一个很大的帮助。

最佳答案

您没有提及如何在应用程序中获取用户凭据。我假设您有一个登录表单。

如果这是您的场景,那么您可以配置 Spring Security 来管理此登录表单。 Spring将以UsernamePasswordAuthenticationToken的形式获取用户凭证。

然后您可以创建一个自定义org.springframework.security.authentication.AuthenticationProvider并覆盖此方法:

public Authentication authenticate(Authentication);

通过此方法,您可以提取用户凭据并使用您提到的REST Web 服务

获得REST Web 服务响应后,您可以使用AuthorityUtils 完成UsernamePasswordAuthenticationToken。我在显示的 json 中看不到角色、组或类似内容,我想您可以从任何地方获取此信息。

这样,您将使用有效的 SpringSecurityContext 覆盖 authenticate 方法并满足您的需求。

希望对你有帮助!

编辑

为了回答评论,我提供了一个身份验证方法的示例:

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
UsernamePasswordAuthenticationToken token = null;
Authentication result = null;
User user = null;

token = (UsernamePasswordAuthenticationToken) authentication;

if (token != null) {
if (StringUtils.isNotEmpty(token.getName())) {

if (YOUR_AUTH_METHOD(token.getName(), (String) token.getCredentials())) {

//DO what you want to retrieve authorization

String[] auxAuth = new String[size];

//Put your roles, groups, ... into auxAuth
//Role names must be ROLE_XXXXX

result = new UsernamePasswordAuthenticationToken(
token.getName(), token.getCredentials(),
AuthorityUtils.createAuthorityList(auxAuth));
}
}
}

return result;
}

通过此方法,您可以检索 spring token ,然后获取登录名和密码。最后,它管理用户授权的角色,然后为 Spring Security Context 构建有效的 token 。

关于java - 针对外部 API 的 Spring 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com