使用Azure目录进行身份验证并从数据库中获取有效的用户角色

时间:2019-12-29 15:37:41

标签: java spring-boot authentication spring-security azure-active-directory

我必须为需要进行身份验证的组织设计一个应用程序,并使用Spring Boot在Azure目录中使用SSO。

所有员工信息都存储在AD中。我的自定义应用程序将拥有自己的用户及其角色,并将其保存在数据库中。并非组织中的每个员工都可以访问此应用程序。管理员将在数据库(Mysql)中添加用户及其角色。

通过在属性文件中添加相关详细信息并配置WebSecurify Config类,我可以弄清楚使用AD执行SSO

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Autowired
   private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService;

   @Autowired
   private AADAuthenticationFilter aadAuthFilter;


   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests().antMatchers(HttpMethod.OPTIONS, 
             "/**").permitAll().anyRequest().authenticated()
            .and()
            .oauth2Login()
            .userInfoEndpoint()
            .oidcUserService(oidcUserService);

    http
            .addFilterBefore(aadAuthFilter, UsernamePasswordAuthenticationFilter.class);

    http
            .headers()
            .frameOptions().sameOrigin()
            .cacheControl();

       http
              .csrf().disable()
              .authorizeRequests().antMatchers(HttpMethod.OPTIONS, 
              "/**").permitAll().anyRequest().authenticated()
     }

 }

用户通过验证后,作为响应,我将获得JWT令牌,该令牌将用于所有其他API请求。但是问题是,由于他使用AD进行身份验证,因此我在这里允许所有员工访问该应用程序。但是,一旦用户通过身份验证,我想检查该用户在数据库中是否可用,如果该用户不可用,我需要发送无效的用户,如果他是我的应用程序的有效用户,则需要获取角色并将其发送到前端作为有效响应。

我还想为用户提供服务级别授权,我对大多数服务都使用了@PreAuthorize Annotation。     @PreAuthorize(“ hasRole('ROLE_VIEWER')或hasRole('ROLE_EDITOR')”)

1 个答案:

答案 0 :(得分:0)

根据我的理解,您不需要使用Mysql数据库来存储用户及其角色,我们可以仅通过Azure Active Directory来实现此要求。

首先,我们可以通过单击azure门户上的“组”->“新建组”按钮并在azure广告中的员工中选择要加入该组的成员,以在Azure Active Directory中创建一个组(显示为下面的屏幕截图): enter image description here

enter image description here

enter image description here

然后通过单击“应用程序注册”并单击“清单”按钮转到天蓝色广告中的应用程序。 enter image description here

您还可以在上面的屏幕截图的“ appRoles”属性下添加更多角色。

然后,在您的Azure广告应用程序中,单击“本地目录中的托管应用程序”。 enter image description here

然后单击“用户和组”->“添加用户”。 enter image description here

选择我们刚才创建的组,然后为其选择一个角色。 enter image description here

现在,您可以通过在问题中提到的注释(@PreAuthorize)为用户执行服务级别授权,也可以参考此tutorial

顺便说一句,如果我们想为天蓝色广告中的组分配角色,我们需要为天蓝色广告(Azure Active Directory pricing)制定Premium P1或P2计划。如果您没有高级计划,则可以为每个用户分配一个角色,但不能为最后一个屏幕截图中的组分配角色。