This documentation is for WSO2 IoT Server 3.2.0. View the documentation for the latest release.
Page Comparison - Setting Up A Federated IdP with OpenID Connect (v.7 vs v.8) - IoT Server 3.2.0 - WSO2 Documentation

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Let's get started! Follow the steps given below:

Table of Contents

Installing OpenID Authenticator Feature in IoT Server

To add the OpenID Connected authenticator to WSO2 IoT Server, you need to install the org.wso2.carbon.identity.application.authenticator.oidc.server.feature.

...

  1. Create a file named openid-extension-deployer.xml in the <IOTS_HOME> directory.
  2. Copy the configurations given below to the openid-extension-deployer.xml file you created.

    Panel
    Expand
    titleClick here to expand and copy the configurations.
    Code Block
    titleopenid-extension-deployer.xml
    <!--
     ~ Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
     ~
     ~ WSO2 Inc. licenses this file to you under the Apache License,
     ~ Version 2.0 (the "License"); you may not use this file except
     ~ in compliance with the License.
     ~ You may obtain a copy of the License at
     ~
     ~ http://www.apache.org/licenses/LICENSE-2.0
     ~
     ~ Unless required by applicable law or agreed to in writing,
     ~ software distributed under the License is distributed on an
     ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     ~ KIND, either express or implied. See the License for the
     ~ specific language governing permissions and limitations
     ~ under the License.
     -->
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
       <parent>
          <groupId>org.wso2</groupId>
          <artifactId>wso2</artifactId>
          <version>1</version>
       </parent>
       <modelVersion>4.0.0</modelVersion>
       <groupId>org.wso2.iot.devicemgt-plugins</groupId>
       <artifactId>openid-extension-script</artifactId>
       <version>3.1.0</version>
       <packaging>pom</packaging>
       <name>OpenID Extension Script</name>
       <url>http://wso2.org</url>
       <build>
          <plugins>
             <plugin>
                <groupId>org.wso2.maven</groupId>
                <artifactId>carbon-p2-plugin</artifactId>
                <version>1.5.4</version>
                <executions>
                   <execution>
                      <id>2-p2-repo-generation</id>
                      <phase>package</phase>
                      <goals>
                         <goal>p2-repo-gen</goal>
                      </goals>
                      <configuration>
                         <metadataRepository>file:${basedir}/p2-repo</metadataRepository>
                         <artifactRepository>file:${basedir}/p2-repo</artifactRepository>
                         <publishArtifacts>true</publishArtifacts>
                         <publishArtifactRepository>true</publishArtifactRepository>
                         <featureArtifacts>
                            <featureArtifactDef>org.wso2.carbon.identity.outbound.auth.oidc:org.wso2.carbon.identity.application.authenticator.oidc.server.feature:${identity-application-auth-oidc.version}</featureArtifactDef>
                         </featureArtifacts>
                      </configuration>
                   </execution>
                   <execution>
                      <id>default-feature-install</id>
                      <phase>package</phase>
                      <goals>
                         <goal>p2-profile-gen</goal>
                      </goals>
                      <configuration>
                         <profile>default</profile>
                         <metadataRepository>file:${basedir}/p2-repo</metadataRepository>
                         <artifactRepository>file:${basedir}/p2-repo</artifactRepository>
                         <destination>${basedir}/wso2/components</destination>
                         <deleteOldProfileFiles>false</deleteOldProfileFiles>
                         <features>
                            <feature>
                               <id>org.wso2.carbon.identity.application.authenticator.oidc.server.feature.group</id>
                               <version>${identity-application-auth-oidc.version}</version>
                            </feature>
                         </features>
                      </configuration>
                   </execution>
                </executions>
             </plugin>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <executions>
                   <execution>
                      <id>default-feature-install</id>
                      <phase>package</phase>
                      <configuration>
                         <target>
                            <replaceregexp file="./wso2/components/default/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info" match="(org.wso2.carbon.identity.application.authenticator.oidc.*)false" replace="\1true" byline="true" />
                         </target>
                      </configuration>
                      <goals>
                         <goal>run</goal>
                      </goals>
                   </execution>
                </executions>
             </plugin>
          </plugins>
       </build>
       <pluginRepositories>
          <pluginRepository>
             <id>wso2.releases</id>
             <name>WSO2 internal Repository</name>
             <url>http://maven.wso2.org/nexus/content/repositories/releases/</url>
             <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
             </releases>
          </pluginRepository>
          <pluginRepository>
             <id>wso2.snapshots</id>
             <name>Apache Snapshot Repository</name>
             <url>http://maven.wso2.org/nexus/content/repositories/snapshots/</url>
             <snapshots>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
             </snapshots>
             <releases>
                <enabled>false</enabled>
             </releases>
          </pluginRepository>
          <pluginRepository>
             <id>wso2-nexus</id>
             <name>WSO2 internal Repository</name>
             <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
             <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
             </releases>
          </pluginRepository>
       </pluginRepositories>
       <repositories>
          <!-- Before adding ANYTHING in here, please start a discussion on the dev list.
                Ideally the Axis2 build should only use Maven central (which is available
                by default) and nothing else. We had troubles with other repositories in
                the past. Therefore configuring additional repositories here should be
                considered very carefully. -->
          <repository>
             <id>wso2-nexus</id>
             <name>WSO2 internal Repository</name>
             <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
             <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
             </releases>
          </repository>
          <repository>
             <id>wso2.releases</id>
             <name>WSO2 internal Repository</name>
             <url>http://maven.wso2.org/nexus/content/repositories/releases/</url>
             <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
             </releases>
          </repository>
          <repository>
             <id>wso2.snapshots</id>
             <name>WSO2 Snapshot Repository</name>
             <url>http://maven.wso2.org/nexus/content/repositories/snapshots/</url>
             <snapshots>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
             </snapshots>
             <releases>
                <enabled>false</enabled>
             </releases>
          </repository>
       </repositories>
       <properties>
          <identity-application-auth-oidc.version>5.1.8</identity-application-auth-oidc.version>
       </properties>
    </project>
  3. Navigate to the <IOTS_HOME> directory via the terminal.

    Code Block
    cd <IOTS_HOME>
  4. Execute the Maven script to install the org.wso2.carbon.identity.application.authenticator.oidc.server.feature.

    Code Block
    mvn clean install -f openid-extension-deployer.xml

Configuring the WSO2 IoT Server IdP

You need to add the federated OpenID Connect authentication configurations to the WSO2 IoT Server's default Identity Provider (IdP) configurations. Follow the steps given below:

  1. Open the <IOTS_HOME>/conf/identity/identity-providers/iot_default.xml file.
  2. Add the following configurations before the <FederatedAuthenticatorConfigs> tag.

    Code Block
    <IsEnabled>true</IsEnabled>
  3. Add the folowing configurations inside the <FederatedAuthenticatorConfigs> tag.

    Info

    The IdentiyServerV4's hosted demo server is available at http://demo.identityserver.io. If you are using your own external Identity Server, makse sure to replace http://demo.identityserver.io with the URL of your hosted Identity Server.

    Code Block
    <OpenIDConnectFederatedAuthenticatorConfig>
       <Name>OpenIDConnectAuthenticator</Name>
       <DisplayName>openidconnect</DisplayName>
       <IsEnabled>true</IsEnabled>
       <Properties>
          <Property>
             <Name>ClientId</Name>
             <Value>server.code</Value>
          </Property>
          <Property>
             <Name>ClientSecret</Name>
             <Value>secret</Value>
          </Property>
          <Property>
             <Name>OAuth2AuthzEPUrl</Name>
             <Value>http://demo.identityserver.io/connect/authorize</Value>
          </Property>
          <Property>
             <Name>OAuth2TokenEPUrl</Name>
             <Value>http://demo.identityserver.io/connect/token</Value>
          </Property>
          <Property>
             <Name>callbackUrl</Name>
             <Value>https://localhost:9443/commonauth</Value>
          </Property>
          <Property>
             <Name>IsUserIdInClaims</Name>
             <Value>false</Value>
          </Property>
          <Property>
             <Name>commonAuthQueryParams</Name>
             <Value>scope=openid</Value>
          </Property>
       </Properties>
    </OpenIDConnectFederatedAuthenticatorConfig>
  4. Add OpenIDConnectAuthenticator as the value for the <DefaultAuthenticatorConfig> tag.
    Example:

    Code Block
    <DefaultAuthenticatorConfig>OpenIDConnectAuthenticator</DefaultAuthenticatorConfig>
  5. Add the following configurations inside the <ClaimConfig> tag to send the role details to WSO2 IoT Server.

    Code Block
    <ClaimMappings>
       <ClaimMapping>
          <RemoteClaim>
             <ClaimUri>idp</ClaimUri>
          </RemoteClaim>
          <LocalClaim>
             <ClaimUri>http://wso2.org/claims/role</ClaimUri>
          </LocalClaim>
          <DefaultValue />
       </ClaimMapping>
    </ClaimMappings>
  6. Anchor
    JIT-Role
    JIT-Role
    Add the following configurations inside the <PermissionAndRoleConfig> tag. The new users that get created on the fly via JIT provisioning is assigned the Internal/devicemgt-admin role by default.

    Code Block
    <RoleMappings>
       <RoleMapping>
          <localRole>
             <LocalRoleName>Internal/devicemgt-admin</LocalRoleName>
             <UserStoreId>PRIMARY</UserStoreId>
          </localRole>
          <remoteRole>local</remoteRole>
       </RoleMapping>
    </RoleMappings>
  7. Add the following configurations inside the <JustInTimeProvisioningConfig> tag to enable Just-in-Time (JIT) provisionins.

    Code Block
    <IsProvisioningEnabled>true</IsProvisioningEnabled>
    Info
    titleWhat is JIT provisioning?

    With JIT provisioning, you can create users on the fly the first time they try to log in to WSO2 IoT Server.

Configuring the Service Providers

The jaggery applications in WSO2 IoT Server, such as the device management, app store, and app publisher consoles are configured as service providers to enable Single Sign-On (SSO) and authenitication. For more information, on accessing the differenct consoles available in WSO2 IoT Server, see Accessing the WSO2 IoT Server Consoles.

You need to configure the serivce providers to have both the basic authentication mechanisam that authenticates the user based on the username and password that was entered and to have the OpenID Connect authentication mechanisam.

For this use case, only the devicemgt service provider is configured. If you want to configure the other applications, you need to add the same configurations to the other service providers in the <IOTS_HOME>/conf/identity/service-providers directory.
  1. Open the <IOTS_HOME>/conf/identity/service-providers/devicemgt.xml file.
  2. Add the following configurations after the <StepOrder>1</StepOrder> property.

    Code Block
    <LocalAuthenticatorConfigs>
       <LocalAuthenticatorConfig>
          <Name>BasicAuthenticator</Name>
          <DisplayName>basicauth</DisplayName>
          <IsEnabled>true</IsEnabled>
       </LocalAuthenticatorConfig>
    </LocalAuthenticatorConfigs>

Extend the Log In page for OpenID Connect

You need to extend the device management console's log in page so that it supports both the basic authentication, which is logging in using the username and password, and the OpenID connect authentication options.

...

Now you have configured WSO2 IoT Server successfully. Let's try it out and see.

Try it out

Follow the steps given below:

...

Note

The user bob did not exist in WSO2 IoT Server. Because you configured JIT provisioning for the IdP, you see that tha a new user named bob created under users in the WSO2 IoT Server management console.
Follow the steps given below to check it out:

  1. Access the IoT Server managemnet console.
  2. On the Main tab in the Management Console, click List under Users and Roles.
  3. Click Users. This link is only visible to users with the Admin role.
  4. Click Update Profile next to bob.
  5. In the screen that appears, check the Role assigned to bob.
    The Internal/devicemgt-admin role is assigned because you configured WSO2 IoT Server to assign this role to all the JIT provisioned users when in
    step 6 when configuring the WSO2 IoT Server IdP.


Congratulations! You have successfully configured setting up dederated IdP with OpenID Connect for WSO2 IoT Server.

...