ReactJs FE 和 Django Rest Services with Azure AD for Authentication & Authorization



我有一个在Reactjs中构建的前端应用程序,使用msal进行身份验证连接到Azure AD。认证完成后,用户需要点击一个按钮来调用Django rest API,这个API也是使用Azure AD进行认证的。React FE和Django在Azure AD中连接到两个独立的应用程序注册。尽管1)FE作为已知客户端被添加到Django的App注册中,2)Django正在公开API,并且范围得到了同意。

当经过认证的FE使用承载令牌向Django Rest服务发送请求时,验证请求失败,提示"无效令牌"。

我可以分别认证FE和Django rest服务,但是认证后的FE无法连接到Django rest服务。请分享你对其他需要检查的地方或任何解决方案的想法。

请检查这些配置是否可以绕过

  1. 检查你是否在门户和代码的重定向URL中给出了你的react应用程序的URL,这样一旦Azure AD验证了用户,它就会用ID令牌返回到你的react应用程序。同时,启用访问令牌和ID令牌。

  2. 检查是否创建了作用域为您的web api(在Azure Portal>你的API公开一个API)。然后在客户端应用的API Permissions菜单选项卡上配置它。然后将其添加到代码设置中的作用域集合中。另外,为该API权限添加grant admin consent。

  3. 检查舱单下面的值可能是null或1,应该是2:如果你使用的是v2.0端点,

    "accessTokenAcceptedVersion" 2,

如果您使用的是v2.0端点,范围应该是api://{server_client_id}/.default.

  1. 在您的应用程序的代码settings .py中,您需要提供您的web应用程序委托登录的权限。(例如:权限:'https://login.microsoftonline.com/(your租户id>',)

auth: {
clientId: '232a1406-b27b-4667-b8c2-3a865c42b79c',
authority:  'https://login.microsoftonline.com/e4c9ab4e-bd27-40d5-8459-230ba2a757fb',
//
}

  1. 当我们执行令牌验证时,请检查http://jwt.io中的jwt令牌受众:令牌是针对web API的。

,aud";azure为JWT令牌生成的值也由"accessTokenAcceptedVersion"属性。(查看发行者或iss是否有v2确认为v2端点)如果您已将访问令牌接受的版本设置为2,那么客户端id和受众需要相同(即不需要)。编写api://in audience)

注意,隐式流是SPA唯一支持的流。授权代码流适用于web应用程序、移动应用程序和桌面应用程序,但不适用于SPA。请参考本文档

引用:

  1. 查看如何配置Azure AD以及如何确定的设置django-auth-adfs。
  2. 你可以检查并找到你的用例场景。
  3. 为认证流检查v2支持的帐户类型
  4. 检查OAuth2.0 on - be - of flow

最新更新