To be able to follow the steps below you'll need to have Windows Server 2016 or later with the "Active Directory Federation Services (ADFS)" feature enabled.
server:
  type: pixilab_server
  auth:
    urlResolver: null
    ajaxRequestResolver: null
    callbackUrl: http://[BLOCKS-DOMAIN-OR-IP]/rest/auth/callback
    rolesOwner: attributes
    rolesPath: roles
    clients:
      - org.pac4j.oidc.client.OidcClient:
          configuration:
            discoveryURI: [PROTOCOL]://[ADFS-SERVER]/adfs/.well-known/openid-configuration
            clientId: [CLIENT-ID]
            secret: [CLIENT-SECRET]
            clientAuthenticationMethod: client_secret_basic
            scope: openid
    servlet:
      security:
        - matchers: internalMatcher
          clients: OidcClient
          authorizers: isAuthenticated
 Make sure you maintain all indentation as shown above, using only spaces for indentation. Here's more about Blocks' configuration file and it syntax.
Since the groups you've configured for your users in your windows server does not match the roles used by Blocks, you have to add role mappings to the Blocks configuration file. Do this by defining a server.auth.rolesMapping parameter where the keys are the group names of your windows server configuration and the values the roles Blocks know about. For example:
rolesMapping: SomeGroup1: Admin SomeGroup2: Manager SomeGroup3: Creator SomeGroup4: Editor SomeGroup5: Contributor SomeGroup6: Staff
In the section named Configure OpenID Connect to provide user groups to Blocks we add a configuration that will provide Blocks with all of the user's groups. This may not be wanted since there can be thousands of these in an already existing windows server configuration. In other cases there will exist groups that doesn't have anything to to with Blocks at all. To filter the groups provided to Blocks, follow the steps below.
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("roles"), query = ";tokenGroups;{0}", param = c.Value); 
c:[Type == "roles", Value =~ "^Blocks.+"] => issue(claim = c);