IdentityServer4-令牌刷新不';我第一次似乎不工作

我有一个ASP.NET核心MVC应用程序,它使用IdentityServer 4作为身份提供者。为了帮助调试,我将IdentityServer cookie设置为5分钟后过期,并将MVC应用程序中的会话超时设置为2分钟 在MVC应用程序的中间件管道中,我在app.UseAuthentication()之后有一个“RefreshTokenMiddleware”使用以下代码: if (!httpContext.User.Identity.IsAuthenticated || httpContext.

Identityserver4 以客户端管理员的身份获取用户和声明

是否可以以管理员身份从ID4获取用户标识 例如,Bob登录并同意访问“我的电影应用程序”。当Bob登录时,他的clientid和个人资料将独立保存到My Movie应用程序数据库中 稍后,“我的电影应用程序”需要通过bob的电子邮件或电话与bob联系,因为bob忘记付款,而会计现在正在跟进。然而,Bob已经改变了与身份提供商的电子邮件和电话 “我的电影应用程序”具有Bobs clientid,但在生成过期联系人列表之前,想询问identity server Bobs配置文件是否有任何更改 有没有

Identityserver4 如何更改JWT/Identity Server 4隐式流中的idp声明值?

我注意到jwt中的“idp:local”。将idp索赔值从“本地”更改为“FooIDP”的最佳方式是什么 正在处理Identity Server 4的Quickstart3\u ImplicitFlowAuthentication quickstart示例。不确定这是否是最佳方法,但看起来您需要在AccountController::Login中更改对SignInAsync的调用 旧的: wait-HttpContext.Authentication.SignInAsync(user.Subje

Identityserver4 Identity Server4自省端点身份验证与客户端凭据

我对MVC/Webforms场景中带有引用标记和内省端点的用例有点困惑 我的基本问题是,为什么内省端点仅设置为允许来自ApiResource凭据(api1/apisecret)的身份验证请求,而不允许客户端凭据?我可以将下面的代码与ApiResource凭据一起使用,我只是未经授权使用客户端凭据。我认为这是设计好的 我想让我们的系统管理员能够撤销令牌并强制注销用户。我的计划是使用CookieAuthenticationProvider的OnValidateId实体定期验证引用令牌,并在需要时强制

Identityserver4 httpclient用于调用wep api

在IS4网站上提供的用于调用web API(函数CallApiUsingUserAccessToken)的示例中,它在每次请求时都创建一个HTTP客户端。我在网上看到,如果服务器使用这种方法接收到太多的请求,您可能会遇到问题 我们是否可以以某种方式声明http客户端的静态属性并分配承载令牌 如果我声明静态httpclient并使用SetBearerToken扩展,理论上我的令牌可以被后续请求使用。如果你想使用共享httpclient,你需要自己创建HttpRequestMessage并设置每条消

Identityserver4 无法验证IdentityServer 3颁发的令牌

我们已将Identityserver3升级为Identityserver4,并在API端点中使用Identityserver3.AccessTokenValidation来验证jwt令牌 升级后,我们无法验证IdentityServer3颁发的令牌 通过使用选项LegacyAudienceValidation=true,我们可以使用IdentityServer4.AccessTokenValidation;支持来自Identityserver3和Identityserver4的令牌 Identi

Identityserver4 升级到IdentityServer 4.0.2时出错

升级之前,我能够使用Azure AD和本地数据库用户(Alice和Bob)成功登录。 当我将IdentityServer4 nuget包从3.1.3升级到4.0.2,然后使用powershell命令或“dotnet new is4ui”时,我就能够编译我的应用程序了 当我运行它时,我得到错误“Scope not found in store.”。然后,我将其添加到启动方法中的AddInMemoryApiScopes 当我运行应用程序时,当我以Alice或Bob的身份登录时,会得到“无效用户名或密

使用OIDC客户端和IdentityServer4将外部身份提供程序令牌与内部身份提供程序令牌交换

在使用IdentityServer4和OIDC客户端的SPA环境中,对多个外部提供商执行以下操作的最安全的方法是什么 基本上,如果用户登录谷歌,我需要登录我的内部系统并创建新的声明。这必须在第三方回调后的服务器端完成。在SPA中,IdentityServer4中最安全的配置是什么 流量: 用户在SPA中登录Google(调用oidcManager.SignInDirect) Google重定向回SPA(cal new Oidc.UserManager().SignInDirectCallback

IdentityServer4:仅允许特定用户/客户端组合登录

我想使用IdentityServer4作为我自己的web应用程序的通用登录名 并不是所有的用户都可以自由使用所有的应用程序,很明显,我可以让所有的应用程序都拒绝不允许访问它们的用户 不过,在identity server中集中一个常见的“此应用程序不是为您激活的”页面似乎有点优雅。这样,我只需要实现该页面一次。identity server必须知道哪个用户可以访问哪个客户端,但在我的场景中这是合理的:它们都是我自己的应用程序 我不确定什么地方适合参加考试。它不能是登录页面,因为用户可能已经从他有

Identityserver4 identity server 4在何处持久化引用令牌?

假设在ID4重新启动的这段时间内,用户登录并获得2小时到期的访问令牌(引用)。此时访问令牌是否有效 (我没有使用实体框架),而是我自己的“IResourceOwnerPasswordValidator”实现 如果是,如何以及在哪里? 如果没有,您知道如何通过ID4设计克服这一问题吗?令牌是一种持久化的类型,由IPersistedGrantStore接口的一些实现管理。它没有很好的文档记录,只是在部署主题的一节中提到过,但它相对简单。我不喜欢实体框架,幸运的是Identity Server per

Identityserver4 关于IndetityServer4的实现问题

在以下上下文中,我对Identityserver4有一些疑问: 我有许多域(domainA、domainB、domainC等),我希望所有域都使用IdentityServer 4进行身份验证,但我只希望IdentityServer 4的一个实现(使用asp.net identity和EF),并让所有域将此实现用作客户端。所有域都位于以MS SQL作为数据库的托管环境中(如果相关的话) 问题1: IdentityServer4是否可以在domainA的子文件夹/区域中运行,如果可以,则需要采取哪些

Identityserver4 向注销后重定向添加参数

我们使用IdentityServer4对.net core 3 MVC应用程序进行访问控制(稍后我们还将添加一个单页应用程序),其中我们有一个唯一标识符作为初始登录页的参数。 我们如何获得注销后重定向以返回到带有上一次登录的参数的登录页面? 谢谢在您的登录控制器或应用程序中间件中设置一个存储中间数据的cookie。在web应用程序中,这种数据通常称为闪存数据。注销请求完成后,使用闪存数据将其发送到需要的位置。我不熟悉identity server 4,但我确信这是可以在.net中轻松实现的。您能

Identityserver4 将IdentityServer 4与F5负载平衡器一起使用

在多台服务器中安装IdentityServer4以实现负载平衡时,我遇到了一个问题。问题在于,每次负载平衡器切换到另一台IdentityServer4服务器时,客户端/用户都会收到无效令牌异常。这是有道理的,因为行中的下一个IdentityServer4没有发出有问题的令牌 显而易见的解决方案是将令牌存储在与所有IdentityServer4服务器共享的数据库中。但是,我还没有找到关于如何针对数据库或任何其他存储类型验证传入令牌的任何信息。IdentityServer4似乎在后台验证来自客户端/

Identityserver4 手动创建并验证JWT令牌

我正在使用IdentityServer4手动创建令牌: var token = await _tools.IssueClientJwtAsync( clientId: "client_id", lifetime: lifetimeInSeconds, audiences: new[] { TokenHelper.Audience }, additionalClaims:new [] { new Claim("some_id", &q

Identityserver4 Identityserver 4正在读取“;“X-转发-Proto”;用于在混响代理之后托管的标头

在发现ASP.NET核心模块充当SSL终止符,因此总是在http上托管之后,我的问题是如何将来自https地址的消息正确传播到IdentityServer。如果您已将标题X-Forwarded-Proto或X-Forwarded-Schema设置为https值,是否不应拾取该值?从您的BaseUrlMiddleware.cs代码中可以看出,您通过读取Httpcontext.Request.Scheme设置了SetIdentityServerOrigin,ASP.NET核心模块后面始终是http。

Identityserver4 OIDC隐式流-重定向uri长度

我将OIDC与响应类型为“id\u token”的隐式代码流一起使用。一切都很好,但注意到带有访问令牌、id_令牌、作用域和会话状态+域名的回调url已经包含2033个字符。我正在进行的项目需要支持IE10,据我所知,URL限制为2048个字符。我不担心回调url的长度会危险地接近这个限制。 对于这样的案例,建议采用什么方法?我是否可以将响应类型更改为“令牌”,然后从用户信息端点请求用户信息?或者我应该做些什么来减小回调url的大小,尝试减少access\u令牌和id\u令牌中的信息?第三个选项

在identityserver4中添加用户声明

我已经创建了identityserver4项目,并尝试在用户登录后添加更多声明。这是我的密码 public async Task<IActionResult> Login(LoginInputModel model) { if (ModelState.IsValid) { // validate username/password against in-memory store

Identityserver4 用户标识声明,其中两个标识符的组合是唯一的

我们使用IdentityServer4管理用户身份和登录。在商业领域,有些公司被划分为多个组织。公司通过唯一标识符进行区分,而组织标识符可能在不同的公司之间发生冲突,这使得只有公司ID和组织ID的组合是唯一的 一个普通用户通常只能访问一个公司中的某些组织,但需要超级用户访问多个公司中的组织。IdentityServer中的声明最初仅为一家公司设计,因此没有真正考虑多家公司应如何融入其中 对于一个普通用户来说,他可以有一个公司声明和一个或多个组织声明。但对于需要访问许多公司的许多组织的超级用户来说

IdentityServer4 API使用承载访问令牌重定向到登录

我使用的是Identity Server 4附带的,在允许访问API端点时遇到问题 我已经使用ABP配置了一个拥有API资源的客户端,并且我能够成功地请求一个承载访问令牌,它包含了我期望的范围 问题是我似乎无法使用承载令牌来访问我的API端点。发生的情况是,我的请求被重定向到默认登录页面,并且API端点没有被命中 我尝试了许多不同的方法,包括用[Authorize]标记修饰API端点方法 部分问题是ABP抽象掉了Identity Server的一些内容,因此默认教程()似乎并不完全适用。我会注释

Identityserver4 在中使用Identity server 4保护.NET framework 4.x web API

我正在使用identity server 4,我知道它现在位于ASP.NET Core上,而且还可以 但是我有一个在.NET4.6.2上的应用程序。我想知道如何保护这些API。还是有可能?或者我应该将我的web API更改为ASP.NET Core 我到处都搜索了,但是所有的示例都是ASP.NET内核。Identity Server 4不关心客户端是什么。如果需要,您可以使用控制台应用程序测试ID4,对吗 你看,归根结底,所有ID4基本上都是一个RESTWebAPI本身,在HTTP协议之上使用O

Identityserver4 如何配置identity server 4以在生成的令牌中包含JTI声明?

是否有一种方法可以配置Identity Server 4,使其在生成的令牌中自动包含JTI(唯一标识符)声明?这比我最初想象的要容易 对于每个identity server客户端实例,都有一个默认为false的“IncludeJwtId”属性。如果希望访问令牌中包含JTI,则需要将其设置为true 这比我原来想象的要容易 对于每个identity server客户端实例,都有一个默认为false的“IncludeJwtId”属性。如果希望访问令牌中包含JTI,则需要将其设置为true 文档现在显

Identityserver4 引用令牌因什么原因会变得无效

每次重新启动应用程序时,我都有无效的引用令牌 似乎还有其他看似随机的场景,其中令牌对一台服务器有效,而对另一台服务器无效。我在哪里可以找到这些信息 在这种情况下,日志是无用的,因为它们只是说“无效引用令牌” 然后右下方会显示“reference token validation success”,相同的标记,不同的框。重启时发生的事实可能意味着内存中存储了一些内容。对于JWTs,它将是签名密钥,对于引用令牌,它将是持久授权。正如另一位评论者所问的,您是否为所述授权实现了持久存储 您是否有IPer

Identityserver4 附加配置文件声明未提交给客户端应用程序

我还有一个叫做“spn”的附加索赔。它被配置为配置文件标识资源表上的声明。当我检查身份令牌时,在那里找不到它。我使用了内置的配置文件服务以及定制的配置文件服务,并获得了相同的结果。我在那里配置并填充在用户声明表中的所有其他声明都正常工作 中是否存在阻止此非标准声明的内容,或者我需要在其他地方对其进行配置的内容 我正在使用最新版本的identity server和EF作为后端,使用ASP.net identity处理用户帐户。我刚刚截获了OnUserInformation Received事件。我

Identityserver4 用户动态同意

我正在使用IdentityServer4为我们的环境构建SCA。 现在,每个用户都有一个或多个唯一的资源,我希望这些资源显示在同意屏幕上,以便用户同意在我们的环境中阅读 我正在使用IS4EF进行数据存储。 我还添加了一些端点,用于向数据库添加数据。 但我对如何继续感到困惑 账户是否应该有一个通用的范围?还是每个帐户有一个范围? 一个用户可以有多个同名但数据不同的声明吗 实现这一目标的最佳实践是什么?我不明白到目前为止您构建了什么,但我认为您正在使事情变得复杂 将资源视为1到n个api的逻辑组。其

Identityserver4 在哪里存储客户机密?

我刚开始使用identity server,现在正在快速入门(提前为noob问题道歉!) 我的疑问来自这样一个事实,即在文档站点上的所有快速入门中,客户机机密都以明文形式出现在代码中,甚至在使用EF和asp.net标识存储配置和用户凭据的示例中也是如此 我的直接反应是,在代码中存储秘密是不允许的,但我可以看到缓解情况取决于我们所讨论的客户端类型,例如,如果客户端是托管mvc webapp,那么代码理论上在托管服务器上得到了很好的保护,但如果它是桌面客户端,则更容易受到反编译等攻击 我浏览了所有的

Identityserver4 Flurl调用标识服务器4

我正在尝试使用Flurl调用Identity Server 4 我从ID服务器上得到一个400。 当我使用PostMan或IdentityModel.Client中可用的方法进行调用时,凭据等会起作用 我对Post(即PosterEncodeAsync)不确定 正如你所看到的,我尝试过各种组合 这个。。不起作用 var address = "http://localhost:8027/connect/token"; var x = await address .WithBasicAuth("cl

IdentityServer4与active directory的自定义身份验证

我无法确定如何在IdentityServer4实现中实现自定义身份验证,该实现将针对active directory进行身份验证。注意:我需要对我公司的active directory服务器进行身份验证,它不是azure active directory 我不清楚是否需要创建一些新的中间件,并在ASP.NET核心服务器中使用IAApplicationBuilder添加它,或者是否需要向IdentityServer本身添加一些内容 我找到了另一个描述如何与active directory集成的链接

Identityserver4 带有ASP.NET 5的Identity Server 4

必须仅将Identity Server与ASP.NET核心一起使用 我们可以将Identity Server 4与ASP.NET 5一起使用,并提供完整的.NET framework支持吗?ASP.NET 5是ASP.NET Core(ASP.NET 5是不推荐使用的名字),是的,Identity Server 4仅与ASP.NET Core一起使用,但如果需要,您可以在完整的framework之上使用它 另一个选项是在ASP.NET 4.x“aka”MVC 5“aka”WebApi 2.x上运

具有外部身份提供程序(如IdentityServer4)的Mashury

Mashery与第三方OAuth2/OpenID连接提供程序配合得好吗?是否可以将其配置为允许OAuth2令牌通过?如果是这样,那么使用不同的身份提供者会损失多少mashury功能 我目前正在使用IdentityServer4,但不久将使用Mashery,我想了解两者的含义。您是否在问Mashery是否支持外部方生成的oAuth令牌 答案是否定的。我认为他们没有任何计划很快实施

Identityserver4 带有Azure AD A和自定义登录页的Identity Server

我想设置一个连接到azure ad的identity server,但我想在identity server中使用自定义登录页,这可能吗 我知道Azure AD允许定制品牌,但它不允许我们需要的定制类型。虽然Azure AD不直接支持UI定制,但Azure AD B2C支持。请参阅此Microsoft文档作为定制Azure AD B2C用户界面的指南: 如Microsoft文档中所述,最简单的模板如下: <!DOCTYPE html> <html> <head&

ASP.NET核心中的IdentityServer4和数据保护

我们最近开始使用IdentityServer4,我读到了ASP.NET Core中的数据保护,我很困惑如果我使用IdentityServer4,是否还需要保留会话数据。我们计划在负载平衡器后面运行多台机器。谁能给我指一下正确的方向吗?我有点不知所措,不知IdentityServer4是否会处理客户端会话信息?多谢各位 您是指负载平衡器后面的identityserver应用程序还是client应用程序。如果你指的是客户端应用程序,请指定你使用的身份验证方法(cookie或bearer)。只有客户端

Identityserver4 调用/connect/userinfo返回错误“;未处理的异常:序列包含多个匹配元素;

我使用的是IdentityServer4、AspnetCore 2.1和angular 6客户端 除了对userinfo端点的调用之外,一切正常 通过查看我的日志,我发现以下几行代码可能是如何处理错误的指针。到目前为止,我还没有成功 StsServerIdentity> Profile service returned the following claim types: sub name given_name family_name email role sub role

Identityserver4 Visual studio 2019和IdentityServer项目模板

正在尝试使用Visual studio 2019学习IdentityServer教程 根据说明创建了一个.Net核心Web应用程序,然后创建了一个MVC项目类型,根据教程,IdentityServer的欢迎屏幕应该在运行时出现 但我得到的MVC页面模板只有这样 基于新的visual studio更新的项目模板是否存在任何差异?或者,要使窗口与第一个图像相似,正确选择的项目类型是什么?您似乎正在运行mvc应用程序,而不是身份提供程序服务 转到解决方案属性、公用属性,然后选择多个启动项目。然后将

IdentityServer4配置OpenId连接提供程序以使用代理服务器

我正在使用IdentityServer4为我的新服务提供身份验证和令牌生成,我已经成功地实现了这一切。我已将我的服务器配置为使用Azure AD作为oidc提供程序,该提供程序在我的登台环境中正常工作,因为Azure AD的ip地址已在防火墙中配置。今天,该ip地址似乎已更改,因为我的代码无法调用Azure AD以获取openid众所周知的配置() 我使用以下代码配置提供程序: services.AddAuthentication() .AddOpenIdConnect(

IdentityServer4:调用AddConfigurationStore扩展方法时重用SqlConnection

在我的例子中,我有几个EF上下文共享同一个数据库(即,所有表都在同一个db上),我希望在所有上下文之间共享同一个SqlConnection,这样我就可以在同一个事务中应用多个更改 为了实现这一点,我首先用以下代码注册SqlConnection: services.AddScoped(sp => new SqlConnection(Configuration.GetConnectionString("DefaultConnection"))); 完成此操作后,我更改了其中一个EF上下文,以

Blazor WASM+;IdentityServer4+;自定义用户存储

我正在Blazor WASM client/API后端的一个项目中工作,其中IdentityServer4用于身份验证,Dapper用于访问自定义用户存储的数据。大部分代码是直接从下面的文章中窃取的 我已经为User、Role、UserStore、RoleStore和SignInManager实现了自己的类,并在IdentityServer4 Quickstart项目的启动中注册了它们,如下所示: services.AddIdentity<CustomUser, CustomRole&g

如何在使用外部提供程序时为IdentityServer4设置displayname

我已经用谷歌安装了我们的IS4服务器。登录时一切正常。现在有一个我似乎无法解决的问题。当使用谷歌时,它将用户名作为一个数字提供给我。这是意料之中的。如何获得用户登录时的正确显示名称?正确的方法是什么?现在我正在使用IdentityServer4.Extensions.PrincipalExtensions.GetDisplayName()来显示名称,并显示GoogleId

将KentorAuthServices与IdentityServer4一起使用

我想使用IdentiyServer4并添加用于SAML身份验证的KentorAuthServices中间件 从中,建议添加Microsoft.AspNetCore.Authentication.Cookies包,并使用登录类型为IdentityServerConstants.ExternalCookieAuthenticationScheme的中间件 我配置了相同的,但无法在变量info中获取访问令牌 public async Task<IActionResult>

Identityserver4 Identity Server 4/OpenID连接默认重定向URL

我开始使用Identity Server 4(在ASP.NET核心下)使用隐式流来保护Angular 2前端(到Web API服务) 使用,我可以成功地从示例的默认页面重定向到登录页面,让用户进行身份验证,然后重定向(通过/connect/authorize)返回Angular站点的回调 如果用户直接浏览到我的身份验证登录页面(而不是Angular主页),我就可以进行身份验证,但无处可重定向。如果手动重定向到auth服务器的/connect/authorize页面,OIDC客户端将报告“在存储中

IdentityServer4隐式授权、客户端和用户帐户

我对使用identityserver4有点陌生,过去几天我读了一些文章,遇到了一个问题,或者可能只是我的知识不够;无论如何,我的问题是: 根据我的理解,我将构建一个angularjs应用程序,我应该坚持隐式授权类型,现在我关心的是我正在构建的应用程序首先验证它的用户(用户名-密码),但该用户将属于一个客户端,这样可以吗 通过查看Startup.cs中我当前正在使用或引用的一个示例上的大量示例应用程序,可以配置其具有的方法: app.UseOpenIdConnectAuthentication

Identityserver4 Identity Server 4错误“;键集丢失“0”;

在我配置EntityFramework代码不工作之后,我只是喜欢这个页面中的doc 正如文档在最后一页所说,“您现在应该能够运行任何现有的客户端应用程序并登录、获取令牌和调用API–所有这些都基于数据库配置。”。但当我运行控制台应用程序时,我看到以下内容,无论服务器信息看起来是否正常,这都是正确的。我确信我在启动客户端之前启动了服务器。我无法找到谷歌和堆栈溢出的原因或相关内容。我想知道“密钥集丢失”的含义是什么,以及如何修复它 您是否添加了以下内容 public void ConfigureSe

Identityserver4 如何在用户更新其配置文件后更新id_令牌

我已经为一个asp.net mvc网站设置了identityserver 4,并将其用于身份验证隐式授权类型。我需要有令牌更新时,用户修改帐户的配置文件,但它不是索赔 一切都在愉快的道路上运行良好,客户验证,然后重定向回网站,索赔通过-一切都很好 我的网站有一个链接,将用户发送回IdentityServer,以便更新配置文件名、电子邮件、电话等,但一旦完成并将用户发送回网站,则不会使用新信息更新声明 我可以看到我的用户索赔工厂正在从配置文件服务中调用,并且新的配置文件信息正在索赔中设置,但是我的

Identityserver4 如何在现有的第二个打开的浏览器窗口中检测前频道注销,并将用户重定向到注销页面?

假设我打开了两个应用程序,每个选项卡中都有一个,它们都使用相同的SSO服务器。用户在应用程序A中全局注销前端频道,但应用程序B在另一个选项卡中保持打开状态。前端频道负责擦除cookies,但理想情况下,会有一种方法将应用程序B重定向到“您已注销”页面。然而,由于不可能通过javascript检测HTTPOnly cookies,因此在应用程序B的选项卡中运行的javascript如何检测cookie的删除并指导用户?我想我们也可以编写一个非HTTPOnly cookie并对其进行监控,但我认为可

IdentityServer4持久授权存储。无效的列名';消费时间';

似乎定义的PersistedGrant表创建脚本与IdentityServer4的代码不同步。我已将该脚本应用于我的数据库,并按照所述配置了持久性,但当我测试登录时,出现以下错误: SqlException:列名“ConsumedTime”无效。 列名“Description”无效。 列名“SessionId”无效 堆栈跟踪在以下代码行中显示了这种情况: IdentityServer4.EntityFramework.Stores.PersistedGrantStore.StoreAsync(P

我在哪里可以看到IdentityServer4中的默认路由?

我对IdentityServer4使用is4aspid模板。当服务器收到名为AccountController.Login的连接/授权请求时。问题。在哪里可以看到所有默认路由?注销示例?我能换一下吗?例如,当收到名为OtherControl.MyLogin的“连接/授权”时 在哪里可以看到所有默认路由 有一个发现端点,用于检索有关IdentityServer的元数据 它返回诸如发行人名称、关键材料、支持的范围等信息。。。您可以在那里看到端点(令牌端点、用户信息端点等) 运行IdentitySer

Identityserver4 快速启动示例代码-NuGet依赖项已断开

我是IdentityServer的新手,正在尝试按照文档在我的Windows 10桌面上设置Quickstart VS.Net解决方案。按照说明下载和安装源代码并在VS.Net 2017中打开解决方案后,我注意到NuGet依赖项—IdentityServer4(4.0.0)和Serilog.AspNetCore(3.2.0)—都已损坏。编译解决方案时返回一个错误:“NETSDK1045当前的.NET SDK不支持以.NET Core 3.1为目标。目标为.NET Core 2.1或更低版本,或者

上一页   1   2   3   4   5    6  ... 下一页 最后一页 共 14 页