【问题标题】:To access user email from OAuth2.0?从 OAuth2.0 访问用户电子邮件?
【发布时间】:2020-03-18 19:17:56
【问题描述】:

我想从 OAuth2.0 访问登录用户的电子邮件地址。只是为了确保正确的用户有权登录。

那我需要使用这段代码:

@RequestMapping("/user")
public Principal user(Principal principal) {
    return principal;
}

从 JavaScript 调用:

<div>
     Logged in as: <span id="user"></span>
</div>

$.get("/user", function(data) { // Call Java code with GET request
   $("#user").html(data.userAuthentication.details.name); // Set id=user to the name of the user
});

但我想从 Java 代码而不是 JavaScript 代码访问它。我该怎么做?

【问题讨论】:

    标签: java spring-boot spring-security oauth-2.0


    【解决方案1】:

    如果您使用 Spring Security 默认值,则可以将 Principal 转换为 UserDetails 对象,并可以访问您的用例所需的一切:

    @GetMapping("/user")
    public Principal user(Principal principal) {
    
      UserDetails userDetails = (UserDetails) principal;
      System.out.println(userDetails.getUsername());
      System.out.println(userDetails.getPassword());
      System.out.println(userDetails.getAuthorities());
    
      // do whatever you want ... 
    
      return principal;
    }
    

    更新:正如您提到的您使用 OAuth2,您可以执行以下操作来注入经过身份验证的 OAuth2 主体:

    @GetMapping("/user")
    public Principal user(@AuthenticationPrincipal OAuth2User principal) {
    
      // do whatever you want ... 
    
      return principal;
    }
    

    【讨论】:

    • 但是当我调用方法用户时。那我应该有什么论据?还是我需要自己从 Java 中获取 HTTP 响应?
    • 如果客户端已经在你的 Spring 应用程序中通过了身份验证,你可以像你已经在做的那样注入 Principal
    • 您的应用程序使用什么身份验证方法? BasicAuth/FormLogin/OAuth2/等?
    • 我正在使用 oathLogin ()
    • '@RequestMapping("/user")' 是某种 AutoWired 注入吗?
    猜你喜欢
    • 2019-02-07
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2014-08-22
    • 2021-12-31
    • 2013-03-12
    • 2018-07-03
    相关资源
    最近更新 更多