【发布时间】:2023-01-14 10:15:36
【问题描述】:
我正在构建一个带有 spring 后端的反应前端应用程序,该应用程序由 azure ad 保护。
我无法使身份验证流程正常工作。
在 azure ad 中,我注册了 2 个应用程序:
- API:默认配置,在“公开 API”下,我添加了一个带有
api://xxxx-api/Access.Api的范围,还添加了客户端应用程序。在“App Roles”下,我添加了角色“User”和“Admin”。我已将这两个角色分配给自己。 - 客户端:注册为 SPA,并重定向到正在运行 React 应用程序的
http://localhost:3000。没有选中令牌的两个框以启用 PKCE。在“API 权限”下,我从 api 应用程序添加了“Access.Api”范围并授予管理员同意。在 React 应用程序中,我使用的是
@azure/msal-browser和@azure/msal-react。然后我只是使用
useMsalAuthentication(InteractionType.Popup);来登录用户。所有这一切都按预期工作,我得到了一个令牌。如果我在jwt.io 中解析这个标记, 我得到
"iss": "https://sts.windows.net/42xxxxx-xxxxx-xxxxxx-xxxxx/","scp": "openid profile User.Read email","ver": "1.0",。但是,我没有看到我的 API 应用程序的范围或角色。
然后我使用 Axios 请求拦截器为每个 API 请求提供承载令牌:
const { instance, accounts } = useMsal(); const account = useAccount(accounts[0]); axios.interceptors.request.use(async (config) => { if (!account) { throw Error('No active account! Verify a user has been signed in.'); } const response = await instance.acquireTokenSilent({ ...loginRequest, account, }); config.headers.Authorization = `Bearer ${response.accessToken}`; return config; });令牌已成功添加到每个请求的标头中。
我的弹簧配置:
如果这是一个问题,我可以自己实现令牌验证,但是我该如何解决,不记名令牌不包含我需要检查用户是否有权访问 api 上的特定资源的角色?
【问题讨论】:
标签: reactjs spring-security azure-active-directory jwt msal