当前位置: 首页 > 知识库问答 >
问题:

Identity Server:发送带有访问令牌的重置密码链接

邵星河
2023-03-14

我正在使用身份服务器4来实现身份验证和授权,以便用户可以访问我的API。它使用带有隐式流的OIDC来验证angular2客户端应用程序:

                ClientName = "angular2client",
                ClientId = "angular2client",
                AccessTokenType = AccessTokenType.Jwt,               
                AllowedGrantTypes = GrantTypes.Implicit,
                AllowAccessTokensViaBrowser = true,
                RedirectUris = new List<string>
                {
                    "http://localhost:5000" //we have to provide https for all the urls

                },
                PostLogoutRedirectUris = new List<string>
                {
                    "http://localhost:5000/Unauthorized"
                },
                AllowedCorsOrigins = new List<string>
                {
                    "http://localhost:5000",

                },
                AllowedScopes = new List<string>
                {
                   "openid",
                   "resourceAPIs"

                }

我计划通过向用户发送电子邮件链接,为他们提供重置密码选项。在传统的实现中,我会使用自定义哈希、用户ID和过期期限向我的DB添加一个条目,然后将该链接发送给用户。当他请求重置密码链接时,我根据我的db验证它,并检查该条目是否仍然有效。

目前,我的解决方案由两个服务器组成:身份服务器、资源服务器(API)和角2应用程序。用户必须获得令牌才能访问应用程序,然后获得访问API的授权。如果令牌无效,他们就无法调用API。这就是资源服务器验证令牌的方式:

        app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = "http://localhost:44311",
            ScopeName = "resourceAPIs",

            RequireHttpsMetadata = false
        });

如果我想使用身份服务器4执行此操作,并发送带有令牌的电子邮件链接,允许他访问更改密码API。我应该对客户端进行哪些更改?

我是否应该添加另一个可以访问此“重置密码API”的客户端,以防止他使用相同的令牌访问资源API。这种实施的最佳做法是什么?

共有1个答案

崔恺
2023-03-14

对于身份服务器3,密码重置不是身份服务器的责任。您应该依靠底层会员提供商系统(asp.net身份或成员预启动)来重置密码。顺便说一句,您可以在身份服务器主机中托管重置屏幕。

 类似资料:
  • 难以理解oauth2令牌和刷新令牌进程 我有这个代码 上面的代码给了我一个访问令牌,我遵循了stackoverflower的同事pinoyyid建议的链接,但是,我对如何正确使用生成的访问令牌访问驱动器和复制文件感到困惑。。。 我看到的所有过程通常都涉及到,我不确定如何使用整个帖子http://.....事情,所以基本上我需要弄清楚,如果我在谷歌客户端的一个新实例中使用上面的代码获得的访问令牌,或

  • 我写的是MVC5,使用的是Identity 2.0。 我在邮件中点击链接,我正在获得密码重置令牌并使用 结果总是false,并表示“无效令牌”。我该在哪里修?

  • 我试图创建spring rest服务,它是由我自己的oauth2资源服务器自动引诱的。我创建了资源服务器: {“error”:“server_error”,“error_description”:“java.io.NotSerializableException:org.springframework.security.crypto.bcrypt.bcryptPasswordenCoder”} 在

  • 我正在使用Lusita的PHP Oauth库(https://github.com/Lusitanian/PHPoAuthLib)。 在用户在我的应用程序中获得授权后,我收到了访问令牌和访问令牌密钥的值。现在有了这些值,我想对API进行身份验证调用。如何使用Access Token、Access Token Secret以及Consumer Key和Consumer Secret的值进行调用?我不

  • 如果访问令牌请求是有效的且被授权,授权服务器如5.1节所述颁发访问令牌以及可选的刷新令牌。如果请求因客户端身份验证失败或无效,授权服务器如5.2节所述的返回错误响应。 5.1. 成功响应 5.2. 错误响应

  • 我知道访问令牌是短期的,因为它们是在不访问数据库的情况下进行验证的,而刷新令牌是长期的,并且是针对数据库进行验证的。 我不明白的是,为什么最初通过发送授权授予获取访问令牌与后来通过发送刷新令牌获取访问令牌之间存在差异。 查看RFC 6749中的这个图,为什么客户端不在步骤(G)中简单地重新发送授权授权?为什么需要刷新令牌?