从主体访问电子邮件 ID,其中身份验证在 Azure 活动目录中完成



我编写了一个自定义应用程序,其中具有带有Azure Active Directory的SSO。用户成功通过身份验证后,所有 API 服务都需要发送 JWT 令牌以访问服务。我正在尝试使用以下方法在身份验证中查找电子邮件ID

@GetMapping("/details")    
public Authentication getUserDetails()
{
//logger.info();
Authentication auth=SecurityContextHolder.getContext().getAuthentication();
return auth;
}

当我调用 API 时,我可以看到以下响应作为 Json 响应

{
"authorities": [
{
"authority": "ROLE_Admin"
}
],
"details": null,
"authenticated": true,
"principal": {
"userGroups": [
{
"objectID": "a5f70709",
"displayName": "Outlook"
}
],
"name": "Karthik",
"subject": "J",
"claim": "65f9",
"issuer": "",
"claims": {
},
"uniqueName": "karthik@microsoftoutlook.com",
"upn": "karthik@microsoftoutlook.com",
"kid": ""
},
"credentials": null,
"name": "com.microsoft.azure.spring.autoconfigure"
}

由于我的电子邮件 ID 在主体对象中,我正在尝试强制转换为自定义类并强制转换为我将在其中使用 key 获得的哈希映射。但这两种方式我都得到了铸造错误。

通过哈希图投射

CustomPrincipal principal=(CustomPrincipal)auth.getPrincipal();

通过哈希图投射

Map<Object, Object> details = (HashMap<Object,Object>) auth.getPrincipal();

我所需要的只是来自身份验证对象的电子邮件 ID。

这个问题的答案取决于你如何配置 Spring 安全性。首先调用System.out.println(auth.getPrincipal().getClass().getName())以查看作为经过身份验证的主体的类,或使用 IDE 设置断点并检查值。

最有可能的是,此类将包含用户的 OpenId Connect 令牌(JSON Web 令牌(,然后您必须对其进行解码。

相关内容

最新更新