Using OpenIdConnect with Azure AD, Angular5 and WebAPI Core: Token lifetime management

Introduction

 

By default, tokens have a lifetime of 1h, we’ll see how to manage their lifetime.

Download Azure Active Directory Powershell module

Because there is no UI for tthis, we have to go with Powershell commands to manage our tokens and Microsoft’s session.

Go to Powershell Gallery and download the module:

Connect to your Azure account

> Connect-AzureAD -Confirm

Then type your login / password in modal.

Create a policy

If you have not set a policy yet, you have to create one with the following command:

> New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1, "AccessTokenLifetime":"03:00:00","MaxAgeSessionSingleFactor":"24:00:00"}}') -DisplayName "WebPolicyScenario" -IsOrganizationDefault $true -Type "TokenLifetimePolicy"

AccessTokenLifetime is the duration in hours of the token with a minimum value of 10 minutes and a maximum value of 24 hours.

MaxAgeSessionSingleFactor is the duration in hours and days of the Microsoft session with a minimum value of 10 minutes and a maximum value of Until-revoked (infinite)

Get your policies

If you want to manage your policies you need to display them then identify their Id:

> Get-AzureADPolicy

Then you should see something like this:

Modify your policies

After identifying Id of the policy you want to modify, type the following command to modify the token lifetime policy and / or Microsoft session:

> Set-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1, "AccessTokenLifetime":"02:00:00","MaxAgeSessionSingleFactor":"12:00:00"}}') -Id <ObjectId of Policy> -DisplayName "WebPolicyScenario" -IsOrganizationDefault $false

Remove your policies

You can also remove your policies if you wish:

> Remove-AzureADPolicy -Id <ObjectId of Policy>

 

How to fix breaking changes since Angular 5.2.8 with Open Id Connect ?

Angular 5.2.8 breaking change

Angular 5.2.8 has introduced URL serialization so special characters are only encoded where needed.
But it broke Open Id connect token readability from hash…..

All the libraries used for Open Id Connect seem to be affected when your token is fetched from the hash in your authentication callback.

Here’s a quick fix to make it work while you waiting for the official fix from Angular (or your Open Id Connect library).

What does look like the encoded url from Angular 5.2.8 ?

 

What did it look like before and how it should look like ?

How can we fix it ?

Before reading the hash to consume the token, we just need to decode the URI like this:

window.location.hash = decodeURIComponent(window.location.hash);
// finalize your authentication process by consuming the token

decodeURI won’t work unlike the previous becaus it  doesn’t encode / decode URI components like ; / ? : @ & = + $ , #

Now you can breathe 🙂 your app works again 🙂