Identityserver4 将自定义HTTP头从oidc客户端js传递到IdentityServer 4

Identityserver4 将自定义HTTP头从oidc客户端js传递到IdentityServer 4,identityserver4,oidc-client-js,Identityserver4,Oidc Client Js,我正在使用ASP.NET核心WebApi、Javascript客户端(使用oidc客户端js)和Identity的IdentityServer 4设置解决方案 我遵循了不同的教程和指南,找到了一个很好的解决方案。 当在未经身份验证的情况下访问JS客户端时,我会被重定向到IdentityServer,在那里我可以成功登录,并被重定向回JS客户端,使用我的承载令牌,然后使用该令牌使用API 该系统必须支持多个“租户”,但所有租户共享同一数据库。 我们的想法是使用URL中的租户密钥访问JS客户端并将其

我正在使用ASP.NET核心WebApi、Javascript客户端(使用oidc客户端js)和Identity的IdentityServer 4设置解决方案

我遵循了不同的教程和指南,找到了一个很好的解决方案。
当在未经身份验证的情况下访问JS客户端时,我会被重定向到IdentityServer,在那里我可以成功登录,并被重定向回JS客户端,使用我的承载令牌,然后使用该令牌使用API

该系统必须支持多个“租户”,但所有租户共享同一数据库。 我们的想法是使用URL中的租户密钥访问JS客户端并将其传递:
www.mydomain.com/{tenantKey}/someSubPage

我想阅读
tenantKey
并使用自定义HTTP头(如
X-My-Tenant-Key
)将其传递给IdentityServer。IdentityServer应在授权过程中包含此密钥

我已经查看了oidc客户端js的GitHub页面并做了一些进一步的研究,但是我无法找到这是如何工作的

另一种方法是将密钥包含在IdentityServer的URL中,并应用一些MVC路由魔术,或者以某种方式使用重定向uri做一些肮脏的事情。
在尝试这些之前,我想看看我是否遗漏了什么

这就是我的JS客户端原型现在处理它的方式:

//设置
变量配置={
权限:“http://localhost:50000",
客户id:“我的客户”,
重定向\u uri:“http://localhost:65000/callback.html",
响应类型:“id\U令牌”,
范围:“openid配置文件电子邮件myApi”,
post\u注销\u重定向\u uri:“http://localhost:65000/index.html",
};
var mgr=新的Oidc.UserManager(配置);
...
//登录
经理(SignInDirect)();

不知道这是否是您正在寻找的,但您可以通过“acr_值”将租户密钥作为查询参数从客户端传递到Identity Server(授权服务器)。这是为你们这种情况准备的。您需要向客户端添加acr_值:

config = {
authority: "http://localhost:50000",
client_id: "myClient",
redirect_uri: "http://localhost:65000/callback.html",
response_type: "id_token token",
scope: "openid profile email myApi",
post_logout_redirect_uri: "http://localhost:65000/index.html",
acr_values : "tenant:your_tenant" };
然后,您可以通过授权上下文访问授权服务器中的值,例如:

string tenant = context.Tenant;

您可以阅读,它的一个用途就是传递租户信息。

实际上,我只是在实施另一个解决方案(我仍然可以用于其他用途)后进行调试时偶然发现了这一点。谢谢