.net core IdentityServer4通过id_令牌或access_令牌进行Web登录 上下文

.net core IdentityServer4通过id_令牌或access_令牌进行Web登录 上下文,.net-core,identityserver4,openid,openid-connect,.net Core,Identityserver4,Openid,Openid Connect,我正在构建一个混合本机/web应用程序。其中一部分是API驱动的,另一部分是显示现有网站的网络视图。 使用我的OIDC SDK(放大/AppAuth)登录后,我可以访问用户的id\u令牌和access\u令牌 但是,由于SDK中使用的Web视图是不可控的,因此我无法重用identity server生成的cookie 问题: 出于上述原因,我正在尝试从用户的id\u令牌或其access\u令牌登录用户。(两者都是JWT) 我相信IdentityServer4不支持这一点,但我希望自己实现一些东西

我正在构建一个混合本机/web应用程序。其中一部分是API驱动的,另一部分是显示现有网站的网络视图。 使用我的OIDC SDK(放大/AppAuth)登录后,我可以访问用户的
id\u令牌
access\u令牌

但是,由于SDK中使用的Web视图是不可控的,因此我无法重用identity server生成的cookie

问题: 出于上述原因,我正在尝试从用户的
id\u令牌
或其
access\u令牌
登录用户。(两者都是JWT)

我相信IdentityServer4不支持这一点,但我希望自己实现一些东西

到目前为止,我发现: 1) id\u令牌\u提示 ,
id\u-token\u-hint
参数:


可选。以前由授权服务器发出的ID令牌,作为最终用户当前或过去与客户端的已验证会话的提示传递。如果由ID令牌标识的最终用户登录或由请求登录,则授权服务器返回肯定响应;否则,它将返回一个错误,例如
login\u required
。如果可能,当使用
prompt=none
时,应该出现
id\u-token\u-hint
,如果没有,则可能返回
无效请求
错误;但是,服务器应该在可能的情况下成功响应,即使它不存在。当授权服务器用作
ID\u Token\u hint
值时,不需要将其列为ID令牌的访问群体。 如果RP从OP接收的ID令牌已加密,要将其用作
ID\u令牌\u提示
,客户端必须解密加密ID令牌中包含的签名ID令牌。客户端可以使用使服务器能够解密ID令牌的密钥将签名的ID令牌重新加密到认证服务器,并使用重新加密的ID令牌作为
ID\u令牌提示

根据OpenID的这个可选规范,我应该能够使用
/authorize
端点上的id_令牌登录用户。我知道这在IdentityServer4中没有实现,但我正在研究如何使用
addCustomAuthorizationRequestValidator
。但是,我不知道如何在代码中“从用户的id_令牌获取用户”。你有什么建议吗

2) 使用
AddJwtBearerClientAuthentication

这个方法听起来像是我可以通过我的访问令牌进行身份验证,但我找不到多少关于如何使用它的文档。

问题

如果我误解了需求,请告诉我,但感觉您有两个不同的应用程序,并试图让它们感觉像一组集成的屏幕

默认行为如下,因为web视图是私有浏览器会话,不能使用系统浏览器cookie。您希望阻止第二步,因为这是一个糟糕的用户体验:

  • 用户登录到移动应用程序
  • 每当调用安全的web视图时,都会有一个新的私有浏览器会话,该会话没有身份验证cookie,因此需要重新登录
常用方法:向WEB视图提供令牌

如果两个应用程序是同一用户体验的一部分,则将移动令牌转发到web视图可能很常见。如果需要,请扩展移动应用程序的范围以包括web应用程序的范围

您不需要发行任何新令牌或更改任何应用程序的安全模型。但是,移动和网络应用程序需要共同开发一个解决方案

服务器端WEB应用可能的WEB视图解决方案

这可能是最简单的选择:

  • 提供新的.Net核心web后端入口点URL,这些URL需要令牌而不是cookie
  • 然后,移动应用程序可以从web视图调用这些端点,并在web视图请求的授权头中提供自己的令牌
  • 然后,web后端可以将移动web视图请求转发到web API
将授权标头添加到web视图请求的代码可能有点棘手,但有几种方法可以做到这一点:

SPA可能的网络视图解决方案

一个适用于Cookieless Spa的选项是web视图通过Javascript桥向移动主机应用程序请求访问令牌。我的一些代码为一个没有烹饪的水疗中心这样做:


您可以从本地PC克隆/运行移动github repos以查看解决方案。我将在我的博客中对此做一些说明。

id\u token\u提示目的不是登录用户,其用于会话管理“如果由id token标识的最终用户已登录或通过请求登录,则授权服务器返回肯定响应”意味着它应该使用链接到该ID令牌的会话授权用户。我使用的WebUI是.NetCore支持的。它使用cookies来检查页面加载和每个后续REST查询的身份验证。好的-我已经更新了我的原始答案-如果我有任何误解,请告诉我。因此,如果我理解正确,请查看您的第一个可能的解决方案,我会添加身份验证标头作为验证请求的有效方法,除了网站上当前使用的cookie之外?是的-我认为您必须这样做,因为使用AppAuth的移动应用程序无法向web端点提供web应用cookie。相反,移动应用程序需要发送令牌,.Net Core web后端需要更新,以避免web视图请求需要cookie。让应用程序使用它花了一段时间,但这似乎是我们需要的!非常感谢你。