Include UserId in Login Response (Token) - Web API 2
Hi everyone,
A quick post on how to include the user’s id in your login response when using Web API 2.
The default response to the /Token request is as follows:
{
“access_token”: “xxxxxxxxxxxxx_xxxx”,
“token_type”: “bearer”,
“expires_in”: 1209599,
“userName”: “[email protected]”,
“.issued”: “Mon, 23 Apr 2018 06:08:03 GMT”,
“.expires”: “Mon, 07 May 2018 06:08:03 GMT”
}
Once the changes below have been made the response will include a userId field:
{
“access_token”: “xxxxxxxxxxxxx_xxxx”,
“token_type”: “bearer”,
“expires_in”: 1209599,
“userName”: “[email protected]”,
“.issued”: “Mon, 23 Apr 2018 06:08:03 GMT”,
“.expires”: “Mon, 07 May 2018 06:08:03 GMT”,
“userId”: “xxxxxxx”
}
There are three very small changes required in order to add this functionality.
First, add an additional argument to CreateProperties in ApplicationOAuthProvider.cs
public static AuthenticationProperties CreateProperties(string userName, **string userId**) { IDictionary data = new Dictionary { { "userName", userName }, // Add **{ "userId", userId }** }; return new AuthenticationProperties(data); }
Pass userId to CreateProperties in ApplicationOauthProvider.
// ApplicationOAuthProvider.cs > GrantResourceOwnerCredentials ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType); ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager, CookieAuthenticationDefaults.AuthenticationType);
// Add user id AuthenticationProperties properties = CreateProperties(user.UserName, user.Id); AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties); context.Validated(ticket);
Pass userId to CreateProperties in AccountController.
// AccountController.cs > GetExternalLogin if (hasRegistered) { Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager, OAuthDefaults.AuthenticationType); ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager, CookieAuthenticationDefaults.AuthenticationType);
// Add userid AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName, **user.Id**); Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);