标签: identityserver3

有没有办法从 Identity Server 中的客户端更新 IDP 会话令牌

我正在使用 Identity Server 来实现公司应用程序的单点登录/退出。有没有什么方法可以使当客户端的 cookie 更新(通过滑动过期)时,它也会转到 IDP 并更新其会话 cookie 的过期时间?目标是即使在 IDP 会话应该过期之后,也能够在所有应用程序之间共享 1 小时的滑动过期时间。

我现在能想到实现此目的的唯一方法是创建一些中间件来检查客户端上的 cookie,如果它即将过期,则添加一个 iframe 来调用 IDP 上的端点,告诉它也更新它的 cookie。我走在正确的轨道上吗?Identity Server 中是否内置了类似的机制?如果有,端点是什么?

为了清楚起见编辑:

问题

  • 10:00 前往客户 A
    • 重定向至 IDP 并登录
    • 重定向回客户端
      • 现在,在 10:10 之前对客户端 A 和 IDP 进行会话
    • 在客户端 A 上保持活跃状态​​直至 10:15,然后前往客户端 B
    • 用户必须再次登录,因为客户端 A 站点已保持其 cookie 处于活动状态,但 IDP 已过期-这是我希望客户端 A 调用 IDP 上的幻灯片以使其会话与任何客户端保持活动状态的位置,以便我可以转到客户端 B无需再次登录

oauth-2.0 openid-connect identityserver3

5
推荐指数
1
解决办法
1207
查看次数

带有 OpenIdConnect 外部身份提供商的 Keycloak

我有一个openidconnect注册的外部身份提供商Keycloak。当客户端应用程序尝试访问受保护的资源时,它会被重定向到KeyCloak登录页面。在登录页面上,我openidconnect启用了外部提供商按钮。一旦用户单击按钮,他就会被带到外部身份提供者(即identityserver3实例)。外部提供商对用户进行身份验证并发回代码。

现在,外部身份提供商中注册客户端的重定向 URL 是 keycloak 的重定向 URL。因此,在外部 IDP 身份验证成功后,它会将代码(因为它是身份验证代码流)发送回重定向 url 处的 keycloak:

http://localhost:5555/auth/realms/QA/broker/keycloak-client/endpoint?code=7bcf5157105199d50874e64eabf03858&state=wQhNIEKW0Ws6CotZg2EsvOorjDVQlWVvobcM2skPSXo.keycloak-client&session_state=rhgu-BXT8FniG9Z-UA RKpp_f-V1nLN-VxFmSE3PSxDg.99b2d903367208e4261fefa475afb1eb

在 URL 中,如果您看到它以endpoint. 我认为这是不正确的,但我无法在 KeyCloak 中更改它(它已被禁用),并且因此在外部 IDP 客户端配置中。

KeyCloak 无法理解上述 url,并出现错误并显示消息“使用身份提供程序进行身份验证时出现意外错误”

不应该KeyCloak理解代码流程并在收到代码后再次请求令牌。然后外部 IDP 将使用令牌进行响应,并将Keycloak该令牌发送回客户端(还将存储它以供将来使用)。

有人可以分享一些关于如何Keycloak通过代码流与外部 openidconnect ID 提供程序配合使用的知识吗?

openid-connect keycloak identityserver3

5
推荐指数
1
解决办法
7787
查看次数

Identity Server 和 OpenId Connect 闲置一段时间后自动注销

我目前有一个Angular 2 SPA调用Web API。我正在使用使用Identity Server 3和 oidc-client-js javascript 库实现的安全令牌服务来提供使用 Web API 的身份验证和授权。

该协议是使用隐式流的OpenId Connect

我根据这篇文章实现了静默令牌刷新。这是为了在调用 API 时始终拥有当前的 Access_Token。

为了在一段时间不活动后注销用户,我使用 JavaScript 计时器从 Oidc_Client_Js 库调用UserManager.signoutRedirect方法。

这是可行的,但我担心这可能会受到操纵,因为用户的会话是由客户端上的 Javascript 控制的。

我的问题是,是否有任何推荐的技术可以在使用 OpenId Connect 保护的单页应用程序上应用“滚动”自动注销?

logout openid-connect identityserver3 implicit-flow angular

5
推荐指数
0
解决办法
944
查看次数

无法找到 IdentityServer4 的 DiscoveryClient

尝试访问发现客户端以访问其他端点并遵循 http://docs.identityserver.io/en/aspnetcore1/endpoints/discovery.html

在 .Net 7.5 MVC 应用程序中安装了 IdentityModel nuget 包。但无法找到DiscoveryClient.

var discoveryClient = new DiscoveryClient("https://demo.identityserver.io");
var doc = await discoveryClient.GetAsync();
Run Code Online (Sandbox Code Playgroud)

有什么变化IdentitymodelIdentityServer4

此外,无法找到“Tokenclient”的参数。

asp.net-mvc identityserver3 identityserver4 identitymodel

5
推荐指数
2
解决办法
4320
查看次数

IdentityServer进入无限的身份验证循环

我在IdentityServer中设置了以下客户端:

new Client
{
    ClientName = "My web application",
    Enabled = true,
    ClientId = "mywebapp",
    ClientSecrets = new List<ClientSecret>
    {
        new ClientSecret("somesecret")
    },

    Flow = Flows.Hybrid,

    ClientUri = "https://app.mydomain.com",

    RedirectUris = new List<string>
    {
        "oob://localhost/wpfclient",
        "http://localhost:2672/",
        "https://app.mydomain.com"
    }
}
Run Code Online (Sandbox Code Playgroud)

我们说它是在线托管的https://auth.mydomain.com/core.

尝试修改MVC OWIN客户端(混合)示例客户端以登录到上述身份服务器,在Startup.cs我修改了ClientId,ClientSecretRedirectUri匹配IdSrv中的客户端设置.现在,当我尝试导航到需要授权的页面时,我被重定向到IdentityServer的URL.当我登录时,断点AuthorizationCodeReceived在客户端的通知中命中,Startup.cs然后进入循环.浏览器的状态显示:

Waiting for localhost...
Waitnig for auth.mydomain.com...
Waiting for localhost...
Waitnig for auth.mydomain.com...
...
Run Code Online (Sandbox Code Playgroud)

等等,永远不会完成登录.为什么会这样?请帮忙.

谢谢!

thinktecture-ident-server openid-connect identityserver3

4
推荐指数
1
解决办法
2039
查看次数

如何在使用IdentityServer进行身份验证后获取WebAPI控制器上的用户信息?

在我的客户端应用程序成功验证IdentityServer3后,我无法在WebAPI控制器上获取用户信息.以下是步骤:

  1. JavaScript Implicit Client应用程序成功登录"使用配置文件和访问令牌"
  2. 我在"ID令牌内容"面板上看到用户的数据 在此输入图像描述
  3. 我对我的WebAPI服务进行"呼叫服务",我在ClaimsPrincipal中看到了许多声明,但无法获取客户端显示的电子邮件,角色等值.以下是代码和回复.

在此输入图像描述 任何人都可以帮我提供一些如何在WebAPI上获取用户数据的帮助吗?

c# jwt asp.net-web-api owin identityserver3

4
推荐指数
1
解决办法
8057
查看次数

移动应用程序如何获得对其 API 的长期访问权限?

我们公司正在构建一个移动应用程序 (iOS),它需要使用IdentityServer与我们的 API 进行通信,该 API 由 OpenIdConnect/OAuth2 保护。

我的问题是,我现在使用的大多数应用程序都要求用户登录/注册一次,然后就不再登录/注册。

假设他们使用 OAuth2 令牌访问 API,他们如何实现这一目标?

OAuth 支持offline_access通过“刷新”令牌,这允许用户无需再次登录即可获取新令牌。但是,它们也有有效期 - 因此考虑到以下情况:

  1. 用户创建帐户,获取访问令牌/刷新令牌。访问令牌将在 1 小时后过期,刷新令牌将在 2 小时后过期。
  2. 用户正在使用该应用程序,应用程序在后台获取新的访问/刷新令牌
  3. 用户关闭应用程序
  4. 用户第二天回来

此时,访问令牌和刷新令牌都已过期。他们如何获得新的凭据,而不提示用户再次输入凭据?

我了解 OpenIdConnect 有身份令牌的概念,只要它在服务器上处于活动状态,就可以获取新的访问令牌,而无需再次提示用户。

所以,我只能想到应用程序执行此操作的两种方式:

  1. 他们有后台服务,在应用程序关闭时运行,不断获取新的访问/刷新令牌。这可能吗?
  2. 在应用程序启动时,如果访问/刷新令牌已过期但身份令牌(会话)仍处于活动状态,请静默访问身份验证服务器(隐藏的 Web 视图?),这将自动获取一组新的令牌。

2 似乎是可能的,但这仅适用于涉及 SSO/cookie 的基于浏览器的 OAuth 流(隐式授权代码)。

对于具有本机登录(应用程序中的 U/P)的应用程序,它们很可能使用资源所有者密码凭据流程,该流程不支持 SSO(无浏览器,无 cookie)。那么他们如何获得新的令牌,除非他们在客户端应用程序本身中存储可逆的用户名/密码,然后再次将它们传递到身份验证服务器以获取新的令牌?

我缺少什么?

提前致谢。

mobile access-token oauth-2.0 openid-connect identityserver3

4
推荐指数
1
解决办法
3893
查看次数

如何将IdentityServer3添加到现有的基于ASP.Net Identity的项目中?

我希望将IdentityServer3添加到当前使用标准实体框架,SQL Server,基于代码优先的方法来管理用户和角色的Web应用程序中.

我想添加IdentityServer3以使用Basic Auth,JWT和OAuth2保护新的Web API端点.他们的关键点是保持现有的用户体验(登录网址,cookie等)不受干扰.

我想尽可能地单独留下ASP.Net身份代码.

我的问题是,我需要执行哪些关键步骤,是否有相关样本?

似乎有大量的文档,但它相当复杂,我找不到这个确切场景的样本.

c# asp.net asp.net-mvc asp.net-identity identityserver3

4
推荐指数
1
解决办法
868
查看次数

UseIdentityServerBearerTokenAuthentication 如何验证 JWT 令牌(使用本地模式)

我的应用程序中有以下代码,比如 WebApp1:

    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {

            Authority = "IdentityServerPath",
            RequiredScopes = new[] { "write", "role", "all_claims" },
            ValidationMode = ValidationMode.Local,
        });
Run Code Online (Sandbox Code Playgroud)

调用方/客户端应用程序将 JWT 令牌传递给 WebApp1。WebApp1 如何知道 JWT 令牌有效?WebApp1 需要知道 JWT 令牌的公钥吗?如果不是,WebApp1如何验证JWT的签名?请注意,我使用 ValidationMode 作为本地,因此 WebApp1 不会联系 IdentityServer 来验证 JWT 令牌。

jwt identityserver3

4
推荐指数
1
解决办法
5868
查看次数

如何在IdentityServer4中进行多步登录?

我们使用的是IdentityServer3,隐式授权,登录包含多个屏幕.在IdentityServer3中,内置支持这种多步登录工作流程(例如,用于接受EULA,双因素登录等),该功能称为" 部分登录 ",甚至还有一个示例:https://github.com /IdentityServer/IdentityServer3.Samples/tree/master/source/CustomUserService/CustomUserService

我们最近升级到AspNetCore和IdentityServer4,并想知道如何实现相同的目标?也就是说,在第一步中检查用户名和密码,如果正确,则将其安全地存储(例如在加密的cookie中)以用于下一步骤.

login oauth-2.0 identityserver3 asp.net-core identityserver4

4
推荐指数
1
解决办法
1772
查看次数