André Foote
André Foote

Reputation: 368

Function to request user claims and token from Identity Server?

What is the best way to retrieve user claims and tokens after logging into identity server?

I have a .Net Core MVC web app. I redirect to an identity server, log in, then redirect back to my web app.

From my app I would then like to request user claims and token from identity server.

Is there a method call to do this?

I have gone through the tutorials and searched around and found libraries (oidc-client-js, oidc.usermanager for javascript that handles this. OidcClient for native c# apps) that handle this behavior, but not for c# web app - so I realize maybe what I'm asking for is not the convention but I'd still appreciate any insight on this.

Edit:

To elaborate, in the c# web app tutorials, specifically tutorial #3, I fail to see how claims and token information become retrievable from from figure 1 to figure 2.

Furthermore, I'm trying to call and handle these objects in c#, not html.

Figure 1

figure 1

Figure 2

figure 2

Thank you

Upvotes: 1

Views: 2232

Answers (1)

Nan Yu
Nan Yu

Reputation: 27538

In controller , you can retire claims like

 var claims = User.Claims;

Get the access token/id token/refresh token :

 var accessToken = HttpContext.GetTokenAsync("access_token").Result;
 var idToken = HttpContext.GetTokenAsync("id_token").Result;
 var refreshToken = HttpContext.GetTokenAsync("refresh_token").Result;

To achieve that , you need register your OIDC middleware inside ConfigureServices as follows (making sure to set SaveTokens to true) :

.AddOpenIdConnect(options => {
// Set all your OIDC options...

// and then set SaveTokens to save tokens to the AuthenticationProperties
options.SaveTokens = true;
});

In mvc razor page , you can get the information :

@using Microsoft.AspNetCore.Authentication
@{
    ViewData["Title"] = "Home Page";
}

<dl>
    @foreach (var claim in User.Claims)
    {
        <dt>@claim.Type</dt>
        <dd>@claim.Value</dd>
    }

</dl>

<dt>access token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("access_token")</dd>

<dt>ID token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("id_token")</dd>

<dt>refresh token</dt>
<dd>@await ViewContext.HttpContext.GetTokenAsync("refresh_token")</dd>

Upvotes: 2

Related Questions