我有一个Asp.Net核心2.2 IdentityServer4应用程序,其工作系统支持声明等。我向其中添加SignalR,并希望使用[Authenitcation]标头并可以访问控制器具有的相同声明。
我找到了几篇有关将SignalR与IdentityServer4集成的文章,但是我无法确定与我已经在做的事情有什么重叠,以及增加对SignalR的支持所必需的。我只需要通知IdentityServer特定的SignalR路由进行授权?
这是一篇详尽的文章,其中包含有关GitHub的广泛示例: https://mikebridge.github.io/articles/identityserver4-signalr/ https://github.com/mikebridge/IdentityServer4SignalR
答案 0 :(得分:0)
我最终重新使用了IdentityServer4的用法来创建jwtbearer令牌,并使用HybridAndClientCredentials,并且在我的Signalr会话开始事件中提取了User声明。
将Hybrid Client添加到IdentityServer4:
findByOwnerIdAndName
findTop1000ByOwnerIdAndName
,然后在mvc客户端上启动:
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true
}
这是根据示例进行建模的: Quickstart5_HybridAndApi
在服务器上的SignalR中:
ServiceCollection.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "https://localhost:5001";
options.RequireHttpsMetadata = false;
options.ClientSecret = "secret";
options.ClientId = "mvc";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("offline_access");
options.Scope.Add("api1");
options.ClaimActions.MapJsonKey("website", "website");
});