在重定向URI中获取身份令牌(id_token)(MVC控制器)

时间:2019-04-15 14:22:40

标签: c# asp.net-core oauth-2.0 claims-based-identity okta

我希望这基本上与Okta(我们用于社交登录的服务)无关,但是我很难找到文档。我正在使用.NET Core 2.0+,并且我的Startup.cs看起来像这样:

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddOpenIdConnect(options => 
    {
        //Configuration pulled from appsettings.json by default:
        options.ClientId = Configuration["okta:ClientId"];
        options.ClientSecret = Configuration["okta:ClientSecret"];
        options.Authority = Configuration["okta:Issuer"];
        options.CallbackPath = "/authorization-code/callback";
        options.ResponseType = OpenIdConnectResponseType.IdToken;
        options.SaveTokens = true;
        options.UseTokenLifetime = false;
        options.GetClaimsFromUserInfoEndpoint = true;
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("email");
    });

该站点内的登录表单使您可以单击“登录Facebook”,然后通过身份提供程序进行身份验证。确认后,它会跳回到我定义的重定向“ Home / Secure”。当重定向返回时,id_token在URL中作为锚点:

https://localhost:5001/Home/Secure#id_token=XXXXXXX

还有一个授权调用,我可以看到它发生了,并且通过Chrome开发者工具控制台也收到了带有id_token的响应。我对.NET Core不太熟悉,因此我很难理解如何获取此id_token。

该请求在Query或QueryString参数中似乎没有id_token,因此我看不到可以在哪里获取它。

1 个答案:

答案 0 :(得分:0)

由于您使用的是OIDC中间件并将SaveTokens设置为true,因此随后可以通过在控制器中通过调用GetTokenAsync获取要访问的ID令牌来检索这些令牌:

string idToken = await HttpContext.GetTokenAsync("id_token");