IdentityServer4 令牌发行者和消费者在同一个项目中

Posted

技术标签:

【中文标题】IdentityServer4 令牌发行者和消费者在同一个项目中【英文标题】:IdentityServer4 token issuer and consumer in the same project 【发布时间】:2018-09-13 15:01:39 【问题描述】:

我有一个托管 IdentityServer4 的项目,并且我正在尝试在同一个项目中托管一个 Web API,它接受访问令牌。

我的问题是,单个项目是否可能包含 IdentityServer 和使用相同 IdentityServer 的 Web API?

编辑:必须使用 Authorize 属性保护 API

【问题讨论】:

【参考方案1】:

我有一个身份服务器 4 项目,在同一个项目中有一个用于客户端 CIUD 的 API。 (让我们称之为开发者控制台 api)。

然后我有一个附带项目,它是一个 asp .net 核心项目,其中包含开发者控制台的实际剃须刀页面,它访问身份服务器项目中的 API。

我这样做的原因是只有一个项目应该更新数据库。因此,为了更新身份服务器拥有的数据库,决定访问它的 API 也应该在同一个项目中。

是的,您可以在 Identity server 4 项目中使用 Web api。

配置服务

services.AddAuthentication(IdentityServerConstants.DefaultCookieAuthenticationScheme)
                .AddIdentityServerAuthentication(options =>
                
                    // base-address of your identityserver
                    options.Authority = settingsSetup.Settings.Authority;
                    // name of the API resource
                    options.ApiName = "testapi";
                    options.RequireHttpsMetadata = false;
                );

配置

我认为这两者都需要。

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
app.UseAuthentication();
app.UseIdentityServer();

端点

因为请求是使用访问令牌作为不记名令牌发送的,所以每个 API 调用的授权都需要包含 authencationScheme。我还没有完全弄清楚为什么,但是没有这个它就行不通了。

[HttpGet("Client/List")]
[Authorize(AuthenticationSchemes = "Bearer")]
public ActionResult ClientList()
  

  

【讨论】:

感谢您的回复,我应该如何将 IdentityServer 项目配置为既是问题又是消费者? 好问题,我记得这很痛苦。我可以编辑问题并从我的 Startup 中给你一些东西。如果您有任何问题,请告诉我。 哇,我很震惊,我可能不得不记录这个:)【参考方案2】:

虽然@DaImTo 的答案是正确且有效的,并且由 IdentityServer 团队开发,但它使用 Introspection Endpoint,这意味着对于每个请求,AddIdentityServerAuthentication 将创建一个 http 请求并将其发送到您的服务器,这是同一个应用程序。

我开发了一个名为 IdentityServer4.Contrib.LocalAccessTokenValidation 的库,它执行完全相同的操作,但没有使用 Introspection Endpoint。它将直接从服务中配置的TokenStore 验证令牌。有兴趣可以使用。

nuget 链接:https://www.nuget.org/packages/IdentityServer4.Contrib.LocalAccessTokenValidation

github 链接:https://github.com/Kahbazi/IdentityServer4.Contrib.LocalAccessTokenValidation

【讨论】:

嗨,谢谢,我不知道如何使用它。你能帮我完成初始配置吗?

以上是关于IdentityServer4 令牌发行者和消费者在同一个项目中的主要内容,如果未能解决你的问题,请参考以下文章

IdentityServer4

IdentityServer4 - 刷新令牌混合流程 - Cookie 和存储

IdentityServer4如何创建身份令牌?

如何在 identityserver4 中没有用户名和密码的情况下从令牌端点获取令牌?

IdentityServer4 如何在授权代码流中存储和更新令牌

如何使用 IdentityServer4 访问令牌和 [Authorize] 属性