<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Priyanka Mane-Patil</title>
    <description>The latest articles on DEV Community by Priyanka Mane-Patil (@priyankamane).</description>
    <link>https://dev.to/priyankamane</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1378114%2F7759ce23-f254-4f95-aef5-fba632e3ecea.png</url>
      <title>DEV Community: Priyanka Mane-Patil</title>
      <link>https://dev.to/priyankamane</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/priyankamane"/>
    <language>en</language>
    <item>
      <title>Integrate Azure AD B2C into Azure APIM Developer Portal and Secure APIs with validating JWT Token</title>
      <dc:creator>Priyanka Mane-Patil</dc:creator>
      <pubDate>Sat, 23 Mar 2024 20:52:17 +0000</pubDate>
      <link>https://dev.to/priyankamane/integrate-azure-ad-b2c-into-azure-apim-developer-portal-and-secure-apis-with-validating-jwt-token-1ie5</link>
      <guid>https://dev.to/priyankamane/integrate-azure-ad-b2c-into-azure-apim-developer-portal-and-secure-apis-with-validating-jwt-token-1ie5</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Azure AD B2C Tenant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhij5nb3gpxj1u6s8k5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhij5nb3gpxj1u6s8k5c.png" alt="Image description" width="796" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An application that's registered in your tenant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yzxkku0vacww9ib80vr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yzxkku0vacww9ib80vr.png" alt="Image description" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User flows that are created in your tenant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibt8x8bfbv93h21ux5g6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibt8x8bfbv93h21ux5g6.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A published API in Azure API Management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhhdfobx7dsyz16byj43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhhdfobx7dsyz16byj43.png" alt="Image description" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(Optional) A Postman platform to test secured access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let’s Begin
&lt;/h2&gt;

&lt;p&gt;Let’s assume that we have one Azure AD B2C Tenant and Azure APIM Default Application is ready with us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Azure AD B2C
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Azure AD B2C Tenant &amp;gt; App Registrations -&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Here, create new app registration using option - ‘+ New registration’&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy its Application/Client Id, which we will require later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In that registered app, go to ‘Certificates &amp;amp; secrets’ option. Choose ‘+ New client secret’ and copy the secret value as it will get shown very first time only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to ‘Authentication’ option now within same registered app, choose ‘+ Add a platform’ &amp;gt; Web Redirect URIs &amp;gt; Hold On here, we will paste Azure APIM’s oauth configured URI here (its explanation and value is available in this document in later points). Search for [AzureAPIMAuth] within this document and paste that URI here. This URI comers from Azure APIM developer portal’s ‘OAuth 2.0 + OpenID Connect’ sections’ newly created ‘OAuth 2.0 Service’ &amp;gt; ‘Authorization code grant flow’ redirect URI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to ‘Authentication’ option now within same registered app, choose ‘+ Add a platform’ &amp;gt; Single-page application Redirect URIs &amp;gt; here, paste Azure APIM developer portal with ‘signin’ like [link/signin]. For example - https://{azure apim app}.developer.azure-api.net/signin and one more &lt;a href="https://jwt.ms"&gt;https://jwt.ms&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to ‘Expose an API’ option now within same registered app, choose ‘+ Add a scope’ &amp;gt; give permission name and description like app.readwrite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to ‘Add Permissions’ option now within same registered app, choose ‘+ Add a permission’ &amp;gt; select app.readwrite scope we created earlier &amp;gt; ‘Grant admin consent for {name}’ &amp;gt; verify all listed permissions status is granted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note down the ‘Directory (tenant) Id’ from ‘Overview’ option, will require it later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, copy and paste all endpoints from ‘Overview’ option, we will require few of them later. (Authorize/Token/OpenId config)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Azure AD B2C Tenant &amp;gt; User flows –&lt;/strong&gt;&lt;br&gt;
Here we will create 2 user flows: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign Up and Sign In (Recommended).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Properties - 

&lt;ul&gt;
&lt;li&gt;Type of method – Email.&lt;/li&gt;
&lt;li&gt;MFA enforcement – as you wish, ‘Always On’ is recommended.&lt;/li&gt;
&lt;li&gt;Self-service password reset – yes.&lt;/li&gt;
&lt;li&gt;Forced password reset - yes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Identity providers – Email&lt;/li&gt;
&lt;li&gt;User attributes –

&lt;ul&gt;
&lt;li&gt;Display name&lt;/li&gt;
&lt;li&gt;Email address&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Application claims –

&lt;ul&gt;
&lt;li&gt;Email addresses&lt;/li&gt;
&lt;li&gt;Identity provider&lt;/li&gt;
&lt;li&gt;Identity provider access token&lt;/li&gt;
&lt;li&gt;Surname&lt;/li&gt;
&lt;li&gt;User’s object id&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sign In using resource owner password credentials.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Azure APIM App
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Azure APIM App &amp;gt; APIs –&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to ‘All APIs’ &amp;gt; Inbound processing &amp;gt; ‘Policies &amp;lt;/&amp;gt;’ &amp;gt;&lt;br&gt;
&lt;code&gt;&amp;lt;policies&amp;gt;&lt;br&gt;
&amp;lt;inbound&amp;gt;&lt;br&gt;
    &amp;lt;cors allow-credentials="true"&amp;gt;&lt;br&gt;
        &amp;lt;allowed-origins&amp;gt;&lt;br&gt;
            &amp;lt;origin&amp;gt;https://{Azure AD B2C}.b2clogin.com&amp;lt;/origin&amp;gt;&lt;br&gt;
            &amp;lt;origin&amp;gt;https://{Azure AD B2C}.onmicrosoft.com&amp;lt;/origin&amp;gt;&lt;br&gt;
            &amp;lt;origin&amp;gt;https://login.microsoftonline.com&amp;lt;/origin&amp;gt;&lt;br&gt;
            &amp;lt;origin&amp;gt;https://{Azure APIM App}.azure-api.net&amp;lt;/origin&amp;gt;&lt;br&gt;
        &amp;lt;/allowed-origins&amp;gt;&lt;br&gt;
        &amp;lt;allowed-methods preflight-result-max-age="300"&amp;gt;&lt;br&gt;
            &amp;lt;method&amp;gt;*&amp;lt;/method&amp;gt;&lt;br&gt;
        &amp;lt;/allowed-methods&amp;gt;&lt;br&gt;
        &amp;lt;allowed-headers&amp;gt;&lt;br&gt;
            &amp;lt;header&amp;gt;*&amp;lt;/header&amp;gt;&lt;br&gt;
        &amp;lt;/allowed-headers&amp;gt;&lt;br&gt;
        &amp;lt;expose-headers&amp;gt;&lt;br&gt;
            &amp;lt;header&amp;gt;*&amp;lt;/header&amp;gt;&lt;br&gt;
        &amp;lt;/expose-headers&amp;gt;&lt;br&gt;
    &amp;lt;/cors&amp;gt;&lt;br&gt;
&amp;lt;/inbound&amp;gt;&lt;br&gt;
&amp;lt;backend&amp;gt;&lt;br&gt;
    &amp;lt;forward-request /&amp;gt;&lt;br&gt;
&amp;lt;/backend&amp;gt;&lt;br&gt;
&amp;lt;outbound /&amp;gt;&lt;br&gt;
&amp;lt;on-error /&amp;gt;&lt;br&gt;
&amp;lt;/policies&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After all APIs &amp;gt; there will be APIs which you have added or by default there is one API called ‘Echo API’ &amp;gt; Inbound processing &amp;gt; ‘Policies &amp;lt;/&amp;gt;’ &amp;gt;&lt;br&gt;
&lt;code&gt;&amp;lt;policies&amp;gt;&lt;br&gt;
&amp;lt;inbound&amp;gt;&lt;br&gt;
    &amp;lt;base /&amp;gt;&lt;br&gt;
    &amp;lt;validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Authorization failed"&amp;gt;&lt;br&gt;
        &amp;lt;openid-config url="https://{Azure AD B2C}.b2clogin.com/{Azure AD B2C}.onmicrosoft.com/{User flow name for recommended sign up and sign in}/v2.0/.well-known/openid-configuration" /&amp;gt;&lt;br&gt;
        &amp;lt;audiences&amp;gt;&lt;br&gt;
            &amp;lt;audience&amp;gt;{Azure AD B2C Registered App’s Application/client id}&amp;lt;/audience&amp;gt;&lt;br&gt;
        &amp;lt;issuers&amp;gt;&lt;br&gt;
            &amp;lt;issuer&amp;gt;https://{Azure AD B2C}.b2clogin.com/{Azure AD B2C tenant Id}/v2.0/&amp;lt;/issuer&amp;gt;&lt;br&gt;
        &amp;lt;/issuers&amp;gt;&lt;br&gt;
        &amp;lt;required-claims&amp;gt;&lt;br&gt;
            &amp;lt;claim name="aud"&amp;gt;&lt;br&gt;
                &amp;lt;value&amp;gt;&amp;gt;{Azure AD B2C Registered App’s Application/client id}&amp;lt;/value&amp;gt;&lt;br&gt;
            &amp;lt;/claim&amp;gt;&lt;br&gt;
        &amp;lt;/required-claims&amp;gt;&lt;br&gt;
    &amp;lt;/validate-jwt&amp;gt;&lt;br&gt;
    &amp;lt;set-header name="tenant" exists-action="append"&amp;gt;&lt;br&gt;
        &amp;lt;value&amp;gt;@{&lt;br&gt;
                    var jwt = context.Request.Headers.GetValueOrDefault("Authorization").AsJwt();&lt;br&gt;
        return jwt?.Claims.GetValueOrDefault("tenant") ?? "unknown"; &lt;br&gt;
        }&amp;lt;/value&amp;gt;&lt;br&gt;
    &amp;lt;/set-header&amp;gt;&lt;br&gt;
&amp;lt;/inbound&amp;gt;&lt;br&gt;
&amp;lt;backend&amp;gt;&lt;br&gt;
    &amp;lt;base /&amp;gt;&lt;br&gt;
&amp;lt;/backend&amp;gt;&lt;br&gt;
&amp;lt;outbound&amp;gt;&lt;br&gt;
    &amp;lt;base /&amp;gt;&lt;br&gt;
&amp;lt;/outbound&amp;gt;&lt;br&gt;
&amp;lt;on-error&amp;gt;&lt;br&gt;
    &amp;lt;base /&amp;gt;&lt;br&gt;
&amp;lt;/on-error&amp;gt;&lt;br&gt;
&amp;lt;/policies&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After all APIs &amp;gt; there will be APIs which you have added or by default there is one API called ‘Echo API’ &amp;gt; there will be below tabs: Design/Settings/Test/Revisions/Change Log &amp;gt; Choose ‘Settings’ tab&amp;gt; go to ‘Security’ section &amp;gt; User Authorization &amp;gt; there will be 3 options: None (by default selected option)/OAuth2.0/OpenId Connect &amp;gt; choose ‘OAuth2.0’ option &amp;gt; it will ask to select ‘OAuth2.0 server’ &amp;gt; choose the name which you have configured in Azure APIM App (this configuration is described later below, please refer the same here).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Azure APIM App &amp;gt; Developer Portal &amp;gt; Identities –&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;By default, there will be basic ‘Username and password’ identity will be there in this section.&lt;/li&gt;
&lt;li&gt;Choose option ‘+ Add’ and select ‘Azure Active Directory B2C’ option:

&lt;ul&gt;
&lt;li&gt;Client id – Azure AD B2C’s registered app’s client id&lt;/li&gt;
&lt;li&gt;Client secret – the one which we have copied and saved as it get shown only once.&lt;/li&gt;
&lt;li&gt;Sign in tenant – https://{Azure AD B2C}.onmicrosoft.com&lt;/li&gt;
&lt;li&gt;Authority - https://{Azure AD B2C}.b2clogin.com&lt;/li&gt;
&lt;li&gt;Client library – MSAL&lt;/li&gt;
&lt;li&gt;Signup policy - /{User flow name for recommended sign up and sign in}&lt;/li&gt;
&lt;li&gt;Sign in policy - /{User flow name for recommended sign up and sign in}&lt;/li&gt;
&lt;li&gt;After configuring these settings you will get below url- https://{azure apim app}.developer.azure-api.net/signin 
Which we will use in above points. Reference - Azure AD B2C  &amp;gt; ‘Azure AD B2C Tenant &amp;gt; App Registrations -’ &amp;gt; point number 5.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfv828g41jx3xv9igsw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfv828g41jx3xv9igsw5.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure APIM App &amp;gt; OAuth2.0 + OpenId Connect –&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose OAuth2.0 &amp;gt; ‘+Add’ &amp;gt; 

&lt;ul&gt;
&lt;li&gt;Display name – provide the name, the one which we will choose in above points. Reference – Azure APIM App &amp;gt; ‘Azure APIM App &amp;gt; APIs –’ &amp;gt; Point no. 3.&lt;/li&gt;
&lt;li&gt;Description – enter description.&lt;/li&gt;
&lt;li&gt;Client registration page url - https://{Azure APIM App}.azure-api.net&lt;/li&gt;
&lt;li&gt;Authorization grant type – Authorization code&lt;/li&gt;
&lt;li&gt;Authorization endpoint url - https://{Azure AD B2C}.b2clogin.com/{Azure AD B2C}.onmicrosoft.com/{User flow name for recommended sign up and sign in}/oauth2/v2.0/authorize&lt;/li&gt;
&lt;li&gt;Authorization request method – select both – get and post&lt;/li&gt;
&lt;li&gt;Token endpoint url - https://{Azure AD B2C}.b2clogin.com/{Azure AD B2C}.onmicrosoft.com/{User flow name for recommended sign up and sign in}/oauth2/v2.0/token&lt;/li&gt;
&lt;li&gt;Authorization request method -In the body&lt;/li&gt;
&lt;li&gt;Access token sending method – authorization header&lt;/li&gt;
&lt;li&gt;Default scope – the one which we created in above points. Reference - Azure AD B2C  &amp;gt; ‘Azure AD B2C Tenant &amp;gt; App Registrations -’ &amp;gt; point number 6. Example – ‘https://{Azure AD B2C}.onmicrosoft.com/{ Azure AD B2C’s registered app’s client id }/app.readwrite’&lt;/li&gt;
&lt;li&gt;Client credential&lt;/li&gt;
&lt;li&gt;Client id – Azure AD B2C’s registered app’s client id&lt;/li&gt;
&lt;li&gt;Client secret – the one which we have copied and saved as it get shown only once.&lt;/li&gt;
&lt;li&gt;Redirect URI-&lt;/li&gt;
&lt;li&gt;Authorization code grant flow- this will be auto generated url which you need to use in one of the above points. Reference - Azure AD B2C  &amp;gt; ‘Azure AD B2C Tenant &amp;gt; App Registrations -’ &amp;gt; point number 4. [AzureAPIMAuth]. Example - https://{Azure APIM App}.azure-api.net/signin-oauth/code/callback/{configured oauth name}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyx4rymktmxn5609hoqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyx4rymktmxn5609hoqu.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Its Done!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Let’s test it –&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Before starting, make sure you have configured Azure AD B2C login UI on Azure APIM Developer portal. If not, go to Azure APIM App’s &amp;gt; developer portal &amp;gt; Go to Sign in page &amp;gt; add button &amp;gt; select Azure AD B2C Login button. Also please take care of below additional things-

&lt;ul&gt;
&lt;li&gt;Add products in Azure APIM App&lt;/li&gt;
&lt;li&gt;When you logged in successfully in Azure APIM Developer Portal using Azure AD B2C &amp;gt; Go to products and subscribe to any products.&lt;/li&gt;
&lt;li&gt;When you will subscribe to any product &amp;gt; In Azure APIM Product Subscriptions section &amp;gt; you can activate that requested subscription to respective User.&lt;/li&gt;
&lt;li&gt;Subscription key is mandatory while executing any API for respective product.&lt;/li&gt;
&lt;li&gt;Also, when you will sign up using Azure AD B2C option within Azure APIM Developer portal &amp;gt; User will first get created at Azure AD B2C. Then it will ask to ‘Complete Sign Up’; so that same user will get created in Azure APIM App’s Users.&lt;/li&gt;
&lt;li&gt;These Azure APIM App’s users’ &amp;gt; you can add them to any specific groups like developers/guests/admin – these are default groups. You can create your own groups also. UI can be customized as per the group validation also.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Publish the Azure APIM App.&lt;/li&gt;
&lt;li&gt;Now we are good for testing!

&lt;ul&gt;
&lt;li&gt;We can directly test the login and API Authorization from published Azure APIM Developer Portal App-&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3ce5m1mln9687gyjocc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3ce5m1mln9687gyjocc.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlh227cz52bfusyp2ln5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlh227cz52bfusyp2ln5.png" alt="Image description" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqb0vzx9vh7fvicw8oeh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqb0vzx9vh7fvicw8oeh4.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can also test the only API(Anyone from Azure APIM App &amp;gt; APIs) from Postman-

&lt;ol&gt;
&lt;li&gt;Here, for testing purpose we will use second user flow which we have created - https://{Azure AD B2C}.b2clogin.com/{Azure AD B2C}.onmicrosoft.com/{second user flow - Sign In using resource owner password credentials.}/oauth2/v2.0/token&lt;/li&gt;
&lt;li&gt;Type - POST&lt;/li&gt;
&lt;li&gt;Body -

&lt;ul&gt;
&lt;li&gt;x-www-form-urlencoded&lt;/li&gt;
&lt;li&gt;grant_type - password&lt;/li&gt;
&lt;li&gt;client_id – Azure AD B2C’s registered App’s client id&lt;/li&gt;
&lt;li&gt;scope - Azure AD B2C’s registered App’s scope&lt;/li&gt;
&lt;li&gt;username – successfully signed up user email&lt;/li&gt;
&lt;li&gt;password - successfully signed up user password&lt;/li&gt;
&lt;li&gt;resource_type – token&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2nn6yk41clkxcvzlfad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2nn6yk41clkxcvzlfad.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>api</category>
      <category>azureadb2c</category>
      <category>activedirectory</category>
    </item>
  </channel>
</rss>
