【问题标题】:Aurelia and Open-Id-Connect plugin for IdentityServerIdentityServer 的 Aurelia 和 Open-Id-Connect 插件
【发布时间】:2019-02-10 00:37:25
【问题描述】:

我已经使用 Quickstart 示例实现了本地 IdentityServer 并将 Aurelia-Opein-Id-Connect 连接到它。设置工作正常。

我的问题是:

  1. 当我按原样运行 Aurelia 应用程序时,它会为我提供(声明)名称和网站。但是当我更改 open-id-connect-configuration-identity-server.ts 并将“令牌”添加到 response_type: "id_token token" 时,它并没有向我提供我的声明,即名称和网站。虽然现在它为我提供了一个 access_token。

  2. 登录成功后如何使用这个access_token并使用它访问web-api?

如果有人可以分享他们的经验,请。

【问题讨论】:

  • 您说您在将response_type 更改为id_token token 时拥有访问令牌,因此问题2 已得到解答。至于第一个,它可能是您的 IdentityServer 上的配置。在您的客户端中,尝试将AlwaysIncludeUserClaimsInIdToken 设置为true
  • 我稍微修改了第二个问题。我的问题是如何使用此访问令牌访问 Aurelia 中的 web-api。您的 AlwaysIncludeUserClaimsInIdToken 正确答案是正确的。

标签: aurelia identityserver4 openid-connect


【解决方案1】:

要使用 access_token 发出 HTTP 请求,您需要在请求标头上将其设置为 Bearer 令牌。当然,这可以通过您喜欢的任何方式完成,一种方便的方法是编写一个interceptor,它将为您发出的每个 HTTP 请求附加标头。

您制作拦截器的方式是在main.ts 中执行以下操作:

import { HttpClient } from "aurelia-fetch-client";

export function configure(aurelia: Aurelia) {
  // Other configuration

  const httpClient = aurelia.container.get(HttpClient);

  httpClient.configure((config) => {
    config
      .withInterceptor({
        request(request) {
          const token = getToken(); // Implement your preferred way to do this
          if (token) {
            request.headers.append("Authorization", `Bearer ${token}`);
          }
          return request;
        }
    });
  });

  // More configuration
}

此代码会将您使用 getToken() 检索到的 access_token 附加到您发出的任何 HTTP 请求中。


一种在此处检索您的令牌的方法是将令牌存储在一个单例类中,然后您从 Aurelia 容器中检索该令牌的方式与检索 httpClient 的方式相同:

const currentUser = aurelia.container.get(CurrentUser);

不过,这完全取决于您的喜好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2019-06-10
    • 1970-01-01
    • 2014-10-25
    • 2016-12-26
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多