C#.NET Core托管Blazor WebAssembly-将其他客户端添加到.Server项目API

时间:2020-05-23 18:50:44

标签: c# identityserver4 blazor webassembly blazor-client-side

我有一个.NET Core托管的Blazor WebAssembly应用程序,使用默认的Microsoft模板使用Microsoft.AspNetCore.ApiAuthorization.IdentityServer包。

我需要添加一个单独的客户端以通过客户端凭据请求访问令牌,以使用服务器端应用程序上的API控制器终结点,但是无法在Microsoft网站或IdentityServer4文档上找到任何有关如何注册它们的文档使用Microsoft的实现。

我已尝试像在典型的IdentityServer4项目中一样,在单独的Config.cs文件中注册客户端:

public static IEnumerable<IdentityServer4.Models.Client> Clients =>
        new List<IdentityServer4.Models.Client>
        {
            new IdentityServer4.Models.Client
            {
                ClientId = "web_id",
                ClientSecrets = { new Secret("web_id".ToSha256()) },
                AllowedGrantTypes = GrantTypes.ClientCredentials,
                AllowedScopes = { "WebAssemblyTest.ServerAPI" }
            }
        };

启动:

services.AddIdentityServer()
            .AddInMemoryClients(Config.Clients)
            .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

但是,这会在请求令牌时返回未找到客户端的错误:

enter image description here

根据Microsoft Blazor WebAssembly docs,API资源:“ WebAssemblyTest.ServerAPI”是在启动时使用AddIdentityServerJwt()注册的,因此我不知道该如何工作。

1 个答案:

答案 0 :(得分:1)

从此answer开始,我能够通过以下方式加载我的其他客户端配置:

services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options =>
                {
                    options.Clients.Add(new IdentityServer4.Models.Client
                    {
                        ClientId = "web_id",
                        ClientSecrets = { new Secret("web_id".ToSha256()) },
                        AllowedGrantTypes = GrantTypes.ClientCredentials,
                        AllowedScopes = { "WebAssemblyTest.ServerAPI" }

                    });
                });

答案如下:“ ASP.NET Identity覆盖了IdentityServer Clients配置的书面方法”,因此您必须将IdentityServer4.Models.Client的单个或数组直接传递到.AddApiAuthorization()方法中。