Authenticating Webmethods.io API Gateway APIs using OKTA as authorization server for OAuth mechanism
Tags: oauth2, api, okta, guide
Published: 2021-06-21 14:45:16

---
title: Authenticating Webmethods.io API Gateway APIs using OKTA as authorization server for OAuth mechanism
published: true
date: 2021-05-31 08:48:01 UTC
tags: #oauth2, #api, #okta, #guide
canonical_url: https://tech.forums.softwareag.com/t/authenticating-webmethods-io-api-gateway-apis-using-okta-as-authorization-server-for-oauth-mechanism/241776
---

### Introduction

This article explains about how to implement OAuth 2.0 on API gateway for OKTA authorization server

### Audience

It is assumed that readers of this article know how to setup API’s on API gateway.

### PreRequisites

• Active tenant subscription on [Webmethods.io](http://Webmethods.io) API Gateway  
• Configure the API at API gateway.  
• Create Application and associate API with application.  
• Refer the link to create API  
[GitHub - SoftwareAG/webmethods-api-gateway: Repository hosting developer tutorials, code samples, custom policies, CI/CD scripts and more to enable developers develop faster with API Gateway](https://github.com/SoftwareAG/webmethods-api-gateway)  
• Active account for OKTA

### Use Case:

• We configured the API on API Gateway. This API checks the availability of bed in hospitals.  
• To invoke this API from API Gateway we have implemented the OAuth 2.0 mechanism.  
• In our case we our OKTA will be working as authorization server.

### What is OAuth 2.0?

OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

The OAuth 2.0 spec has four important roles:  
• The “authorization server” — The server that issues the access token. In this case Okta is the authorization server.  
• The “resource owner” — Normally your application’s end user that grants permission to access the resource server with an access token  
• The “client” — The application that requests the access token from Okta and then passes it to the resource server  
• The “resource server” — Accepts the access token and must verify that it’s valid. In this case this is your application

For More info please follow below link:  
[OAuth 2.0 and OpenID Connect Overview | Okta Developer](https://developer.okta.com/docs/concepts/oauth-openid/)

### API Used for our Use case:

```
   API Name: CheckBedAvailability

```

![image](https://aws1.discourse-cdn.com/techcommunity/optimized/3X/9/4/94cb6cc5873ba37c2cab3187d3a236fa8b5b1d6c_2_690x120.png)

### Enforce policy

• Open the API CheckBedAvailability.  
• Navigate to the policy  
• Click on Identify & Access policy.

![image](https://aws1.discourse-cdn.com/techcommunity/original/2X/9/9ee269f4e5113f3e652389c333bafd8c04e1621a.png)

• Select Identify & Authorize Application.  
• Select OAuth2 Token.  
• Save the changes.

![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/e/2/e26da278eebbd4caa15eac3f9120e2f9356ba10c.png)

### Create Scope in API

1. Go to the API in our case it is checkBedAvailablity
2. Navigate to scopes with in the API
3. Create the scope and map the resource with it
4. In our case scope name is CheckBedAvailibiltyScopeV2
5. Add resource name is CheckBedAvailability
6. Click Save.

![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/3/d/3d724860852dfac7c3cec092f71eb99c3600c165.png)

Before Configuring the Authorization server, we need to understand couple of terminologies

Introspection: Introspection is the way to authenticate the token. It is sub divided into 2 parts

1. Local introspection: Validating the token with in the gateway. This can be done using the JWKS URI or the public certificate of the issuer. For this the token should necessarily be JWT.
2. Remote introspection: Validating the token with the authorization server. It has introspection endpoint, which is used to validate the token. Along with that we have client id and client secret which we are used to protect the endpoint, so that anonymous users won’t get access to the resource. Underneath to invoke an endpoint we need a user, Gateway user is the one under which we invoke the endpoint.  
Dynamic client registration  
Dynamic client registration is used when you want to create the client automatically in the OAuth2 authorization server when a application is created in API Gateway.

### Add Authorization Server

1. Click on administration tab
2. Navigate to Security tab
3. From the left hand tab click on JWT\OAuth\OpenID
4. Click on Add authorization server.
5. Provide the name as OktaAuthServer
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/8/1/81a321d27123e249606bbd980e3a9e9efaaf9493.png)
6. Provide the Discovery URL and click on Discover.
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/a/3/a3c1818aef2e7659765a2cb6085e18bcf4bdf9db.png)
7. This will populate the values on Introspection, Dynamic client registration and in Metadata.
8. Add the scope and save it.
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/8/7/87aa9ba12875a86d5f858c76175532b6f8c75533.png)

### Map Scope OAuth Scopes

1. Click on map Scope
2. Give the authorization server scope , In our case it will be OktaAuthServerScopeMapping
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/2/a/2ab272c322cdfd5a0c3d511838e588c3aaef714b.png)
3. Give the API scope name In our case it we have given in CheckBedAvailibiltyScopeV2
4. Click Save.
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/e/b/ebbfecb40e660c797bd3e7c7c69a473d49417aa6.png)

### Create Application

1. Click on create Application and name it as ExtrenalOAuthServerApp\_OkTA.
2. Select the API which we want to associate with this application. In our case it will checkBedAvailibility API.
3. Click on Authentication and then click on Create Strategy
4. Select Authentication scheme as OAuth
5. Provide the name for the strategy, In our case we have named it as ExtrenalOktaStrategy
6. Select the authentication server as OktaAuthServer.
7. Enable the generate the credentials
8. Select application type as Public
9. Application profile as web
10. Select Grant Type as “authorization\_code”
11. Select the scope in our case it will be OAuthCheckBedAvailabilityScope
12. Provide the Redirect URI as [https://oauth.pstmn.io/v1/callback](https://oauth.pstmn.io/v1/callback)
13. Provide the Scope in our case it will be CheckBedAvailibiltyScopeV2
14. Click on Add.
15. It will generate the client ID and client credentials, which will be used to generate the access token.  
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/b/3/b30da20a42fcab96a75a5daa51616aa0892c934e.png)

### Test Using postman client

1. Select Authorization as OAuth 2.0
2. Set the below values
Grant Type: Authorization code  
Call Back url: [https://oauth.pstmn.io/v1/callback](https://oauth.pstmn.io/v1/callback)  
Authorise URL: We can get the from the metadata provided by OKTA  
Access Token URL: We can get the from the metadata provided by OKTA  
Client ID: We can get the from the metadata provided by OKTA  
Client Secret: We can get the from the metadata provided by OKTA  
State: Any random alphanumeric value  
Client Authentication: Send Client credentials in Body
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/0/a/0ab01d8fb9904a0955434769e150f08ebfab8a66.png)
3. Click on generate token  
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/4/6/468432027e45d524c21d9326ea5163cc4c224101.png)
4. Click on use token
5. Submit the request
![image](https://aws1.discourse-cdn.com/techcommunity/original/3X/6/d/6d308f7d9b1059790482764b61a95c8f32e6f21c.png)
6. Validate the response.

[Read full topic](https://tech.forums.softwareag.com/t/authenticating-webmethods-io-api-gateway-apis-using-okta-as-authorization-server-for-oauth-mechanism/241776)