首页 > 解决方案 > 在 AspNetCore 中,这目前叫什么,我可以封装它吗?

问题描述

我目前正在制作一个与需要 oAuth OIDC 连接/令牌的特定 API 交互的库,我想做一些东西,使该库的用户更容易使用该特定部分,因此他们不需要所有这些自定义代码.

这目前叫什么,有代码示例吗?

添加OpenIdConnect

我问是因为试图完成这项工作,文档到处都是。从 netcore 之前到 netcore2 再到现在的 netcore31,这个特定过程似乎已经多次发生重大变化。

标签: asp.net-coreasp.net-identity

解决方案


AddAuthentication和都是扩展AddOpenIdConnect方法。

扩展方法允许您将方法“添加”到类型,而无需直接修改类型 - 这些方法实际上并未添加到类型中,但我们可以像调用它们一样调用它们。这在您想扩展由第三方创建的类的行为但无权访问源代码的情况下很有用。

至于所讨论的特定模式是什么,虽然没有规范名称,但它只是封装应用程序的服务和依赖项配置的一种方式。

AddAuthentication是 的扩展方法IServiceCollection,是services类型。AddAuthentication返回类型为AuthenticationBuilder,并且AddOpenIdConnect是 的扩展方法AuthenticationBuilder是 的实现AddOpenIdConnect,但是当您要封装配置时,您可能可以执行以下操作:

public static class OpenIdConnectExtensions
{
    public static AuthenticationBuilder ConfigureOpendIdConnect(
        this AuthenticationBuilder builder)
    {
        return builder.AddOpenIdConnect(options =>
        {
            options.SignInScheme = IdentityConstants.ExternalScheme;
            // Do whatever else you need.
        });
    }
}

并调用如下:

services
    .AddAuthentication()
    .ConfigureOpendIdConnect()

另一方面,中间件是作为管道的一部分执行以处理请求和响应的代码。中间件位于接收请求和发送响应的中间,因此得名。这允许您做一些事情,例如始终将某些标头添加到响应中,而无需在您的应用程序中拆分该逻辑。正如您正确提到的,您会看到这些是通过调用应用的,例如app.UseXyz().


推荐阅读