【问题标题】:Server side Blazor get bearer token服务器端 Blazor 获取不记名令牌
【发布时间】:2020-08-20 15:07:17
【问题描述】:

使用 .net core 3.1.4,我创建了一个使用 Azure 活动目录的服务器端 Blazor 应用程序 验证。 我正在使用以下 json,其值指向我的 azure 活动目录。

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "contoso.onmicrosoft.com",
    "TenantId": "e86c78e2-8bb4-4c41-aefd-918e0565a45e",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
  }
}

一切正常意味着我可以使用我的 Azure AD 凭据登录,但在 httpcontext 的请求标头中,我没有获得承载访问令牌以用于进一步调用我的其他 api。在这种情况下如何获取登录用户的不记名访问令牌?

谢谢, 周杰伦

【问题讨论】:

    标签: asp.net-core azure-active-directory blazor-server-side


    【解决方案1】:

    您可以在ConfigureServices 中注册您的OIDC 中间件并将SaveTokens 设置为true:

    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));
    services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
    {       
        options.SaveTokens = true;
    });
    

    并参考此代码示例:https://stackoverflow.com/a/59901672/5751404 将令牌保存到本地存储以供以后使用。

    在默认模板中,您只能通过以下方式获取 id 令牌:

    var id_token = await HttpContext.GetTokenAsync("id_token");
    

    由于您只执行 OpenID Connect 登录过程,response_typeid_token,如果您想获取访问令牌以访问另一个 web api,您可以使用 Code Flow ,您可以使用代码获取访问权限OnAuthorizationCodeReceived 事件中的令牌。

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2022-11-09
      • 1970-01-01
      • 2020-05-10
      • 2020-03-18
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多