我正在使用Azure AD Connect与OpenId Connect进行身份验证和许可
我不明白为什么我从Azure收到一个没有签名的JWT IdToken和一个有签名的AccessToken。这可能是由于IdToken设置了alg=none属性。但是为什么不也对IdToken进行签名呢?是否直接从Azure的令牌端点获取ID令牌?如果是这样,则通信是安全的,主机通过TLS/HTTPS进行身份验证,因此无需对ID令牌进行签名或完整性保护,该令牌仅用于您的客户端 因此,如果我知道只有Acces
我想为slim应用程序实现jwt身份验证,当我使用Postman时,我遵循了tuupora的PRS7 jwt身份验证中间件及其工作原理,因为当我请求“/auth/ibice”路由时,可以选择使用标题作为“Authorization:Bearer tokenString”,如下所示
我正在使用当我请求此路由时返回的令牌字符串“/authtoken”,如下面所示
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cuY
我正在尝试使用lumen开发RESTAPI。对于身份验证,我使用Dingo和JWTAuth api,但我得到以下消息:
未定义身份验证保护驱动程序[api]
下面是来自邮递员的邮件截图,包括stacktrace
在您的引导/app.php文件中,确保未注释:
$app->register(App\Providers\AuthServiceProvider::class);
这将导致注册apiauth驱动程序。请不要发布相关文本的图像。以适当的格式将文本包含在问题中。
我刚开始学习香港。我成功地使用Oauth2插件实现了一个简单的身份验证系统,但现在我在使用JWT插件时遇到了一些问题
我搜索了很多,但是缺少关于这个主题的文档和资源
我跟随导游来到这里:
我用他的JWT凭证创建了一个消费者:
{
"secret": "6b965bcbf48a4ea7a170bf56557e14c1",
"id": "5587b664-c8b5-4941-95fe-f6e03c319fa4",
"algorithm": "HS256",
"created_at": 1500473
我有一个多租户aad应用程序,需要对其进行令牌验证。我有权访问“TokenValidated”事件处理程序中的令牌。目前,我已将属性“validateisuer”设置为true。在线查看时,我注意到很多地方,对于多租户应用程序,此属性设置为false,并且提到了自定义验证。有人能告诉我多租户应用程序需要做哪些额外的令牌验证吗?举例会很有帮助
我已经阅读了ValidatingIssuerNameRegistry,但不知道这是否适用于我的场景,因为我们没有限制任何特定租户
谢谢
-Ravi这是一篇关
嗨,我正在通过邮递员测试一些api
注册API-它接受公钥并存储在服务器中。要获取公钥,我使用https://mkjwk.org/。它生成一个包含公钥和私钥的密钥。下面是生成的密钥:
{
"kty": "RSA",
"d": "HgP6c8xA3D_-8DKgSk3fQ_FZuPj2RNSFE5NLfGz3GJjkyt9fzOPztNObQmLZ2EoJzPrYL8ljk-1mKGIr5Ma1n4TPX_kQ9JErq9wNyhMUTykQ8PqjMuxmUpddn43RZ27VPjvU
是否建议使用JWT令牌的签名部分将已撤销的令牌列入黑名单?原因是我想修复我在数据库中为已撤销令牌存储的标识符的大小。将来,我可能会向我的JWT负载添加更多数据,并且令牌中没有任何唯一的JTI
我使用的签名算法是HS256。我并不认为在任何用例中使用JWT的签名是一种好的实践。其目的是使JWT独特且“安全”。经过大量研究,我发现最佳实践是使用JWT的有效载荷。它的声明也是公开的,而且与他们合作要容易得多。对于jti部分,可以使用uuid。当涉及到随机和唯一的数字,尤其是标识符时,它们是最好的。我真
我正在尝试验证JWT令牌上的签名。为此,我将我的秘密粘贴到jwt.io,然后粘贴我的令牌,然后检查页面底部的签名验证指示器。最终作为验证签名的是我的非编码秘密,并检查了base 64编码秘密标志
我的秘密是ABC123\u ABC123-ABC123-abC——它包含非法的base 64字符,显然不是base 64编码的,但jwt.io似乎不同意?这是什么原因?在jwt.io的引擎盖下似乎有一些Base64修正,我通过这个工具把我的秘密放了进去,结果似乎符合我的目的
“\”替换为“/”,“-”替
接下来,我被困在mc admin config set myminio/identity\u openid步骤。全部,我正在跑步
mc admin config set minio identity\u openid config\u url=“\uuuuuuuuwso2openidul\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但我得到了一个错误:
mc: <ERROR> Un
我在Azure ADB2C中使用自定义策略来验证和授权用户访问我的API后端。这个很好用
现在,我想在Azure ADB2C jwt令牌中添加一个额外的“aud”条目,这样我就可以将相同的令牌用于期望出现此aud条目的不同服务
现在Azure ADB2C用创建它的应用程序ID填充“aud”字段
有没有办法在Azure ADB2C的“aud”字段中添加一个静态条目?根据您的描述,我认为您希望使用相同的令牌访问多个服务(如果我的理解有误,请纠正我)。不幸的是,你不能这样做
一个令牌只能对应一个范围。
当用户注销(注销)应用程序时,网关如何与用户已注销的所有服务通信
换句话说,当用户注销microservice architecture应用程序时会发生什么?这是一个一般性的问题,我将给出我个人的想法
让我们以一个单页应用程序为例,它与一堆微服务通信,并由一个验证令牌的网关进行保护
当用户登录时,auth server提供的令牌存储在浏览器存储中(例如:localstorage)
当用户注销时,不会向网关或身份验证服务器发送通信,令牌将从浏览器存储中删除
因此,如果有人持有访问令牌,只要访问令牌
以下是我在ubuntu 20.x上使用的命令,用于为JOSE/NODEJS(14.16)应用程序生成EdDSA 25519的密钥对:
以下是生成的私钥:
-----BEGIN OPENSSH PRIVATE KEY-----
a3BlbnNzaC1rZXktdjEAAAAABG5vbmVAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACAp92w+fwodL4kaUDrNghdZScdcg54IJOO6tLpG91oeKgAAAJj71Y9w
我对这个JWT代币很陌生。我已经为文本batman创建了令牌,它给了我:
eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUkpKLMlNzFOqBQAAAP__.Q_tupftGHJ-S1p2Ocopzt7CUYCm3PeLncnifL7EXBeguIHUfwMiP0AZQUO607MViwwQk4g-Kxnbrz7xmifkfPA
我重新启动了服务器,以为JWT会将计算出的令牌保存在内存中,但是重新启动后,当我传递上述令牌时,JWT仍然能够
JWT是一种无状态身份验证机制,因为用户状态从未保存在服务器内存中
如果管理员出于某些原因阻止用户,如何使令牌无效?JWT不是一种身份验证机制,而是一种令牌格式。由于JWT是自包含的,因此可以将其用于无状态身份验证。然而,这并不意味着您的身份验证机制必须是无状态的(尽管它有其优点)
有几个选项可用于处理用户锁定/撤销授权:
在验证JWT之后,在每个请求中查找用户,以查看用户是否被锁定
访问令牌应该是短期的,因此您可以在下次请求新的访问令牌(例如,使用刷新令牌)时查找用户,然后拒绝发出新的访问令
标签: Jwt
asp.net-identity-2asp.net-core-webapi
我很生气。谢谢你应该考虑把这个问题变成一个问题,然后自己回答它作为一个正确的答案。我已经这么做了,你确实帮了我。谢谢。当你没有使用JWT或Identity的经验时,互联网上有很多过时的教程,很难找到解决方案。我想问一下builder=new IdentityBuilder(builder.UserType,typeof(IdentityRole),builder.Services)does?@t123yh这是AddIdentityCore()方法没有采用所用角色类型的构造函数这一事实的解决方法的
我知道客户端向服务器发出请求,服务器发回客户端用来发出请求的令牌。我不理解这是如何安全的,因为中间的人可以捕捉来自服务器的响应并使用那个令牌。
也许我不完全理解这一点,但我想
谢谢 你对中间人的关注,不知何故获得JWT的副本是一个有效的,如果发生这种情况,那么MITM可能会伪装成一个有效的用户,使用他的JWT作为标识。
然而,只有在服务器和客户端之间传递的数据完全未加密的情况下,这个问题才会很容易发生。最可能的情况是,您的应用程序将使用某种形式的SSL(例如HTTPS)在服务器和客户端之间进行通
是否可以从SHA384哈希生成JSON Web令牌。如果可能,请告知如何可能。
另外,请从我的SHA384哈希生成JSON Web令牌:
e648d207eb6a457cc3b415e5e6db38759de529051d808b5d34c679c43020a233e6b5161de2e85070127009d61e4c24c8
不,将散列转换为JWT令牌是不可能的,我也不明白为什么会有人想要这样做
正如评论中提到的,这种方法毫无意义
散列不包含任何可转换为任何内容的可读信息
如果这是您的意思
我正在做一个手机银行项目。我们正在使用JWT令牌调用我们的核心API。现在我们的需求是,我们需要从某个第三方应用程序调用相同的API,并使用另一个jwt令牌进行基于角色的访问
只是为了示范-
//我的控制器方法
公共对象getBalance()
移动应用程序将使用JWT令牌1访问它。
第三方应用程序将使用角色为“用户”的JWT令牌2访问它
我如何配置它
我使用KONG作为我的API网关,KONGA作为我的KONG管理控制台。我希望KONG用JWT令牌验证我的API,我希望如果传递的令牌无效或令牌中缺少一些声明,KONG必须验证它并抛出异常
但现在的问题是KONG正在接受所有JWT令牌,并且似乎在将请求路由到微服务层之前并没有验证令牌
在香港,我创建了一个服务和路由,并在其中添加了JWT插件。正如我前面提到的,我使用KONGA作为我的用户界面管理控制台,所以我没有直接在KONG中使用curl请求做任何事情
我创建了一个消费者,我在其中添加了一个J
我请求WSO2-AM获取OAuth令牌,以代表用户访问api管理器中发布的api。所有操作都使用access_令牌中返回的大字符串,但我想使用短版本,可能是编码的
请求:
curl -X POST -H 'Content-Type:application/x-www-form-urlencoded' -u
<consumer-key>:<consumer-secret> -k -d
'grant_type=urn:ietf:params:oauth:grant-typ
在我的设计中,我有一个API网关(SpringCloudAPI网关)、授权服务器(Oauth2)和资源服务器(microservice)。(我也有一个CAS服务器,但为了简单起见,现在可以忽略它)
我只想使用API网关重定向客户端请求
如果用户未通过身份验证,则应将请求发送给授权部门
服务器和身份验证和授权过程结束后
完成后,授权服务器应在中返回JSESSION和JWT
访问令牌头。之后,API网关应返回JSESSION
和JWT给客户
如果用户经过身份验证,则应将请求发送到资源服务器
所以
如果我有两个JWT,它们的声明集和头是相同的,但是它们在json中的存储顺序不同,那么它们应该被认为是相等的吗
澄清:
我知道,作为JWTs的用户,您不需要比较它们,但这不是我正在做的
假设我们有一个jwt库,您有一个对象,它以解码的形式表示jwt。如果我们从解码的JWT创建一个编码的JWT,然后将其应用于某个函数,该函数再次返回解码的JWT。如果解码过程中声明或标头存储在某个集合中的顺序是否改变,那么我们认为这两个解码的JWT是相等的吗?
仔细考虑一下,也许将标题和声明存储在具有某种顺序概念的
在身份验证SPI的isValid()返回后生成令牌后,我尝试向令牌中添加更多角色
我有一个应用程序,其中有短信otp功能。在用户验证OTP后,我希望通过将这些角色添加到令牌中来向用户授予更多角色(编辑:新生成的具有新值的令牌,因为JWT无法修改)。但是如何使用新角色修改令牌或新生成的令牌?
是否有我可以使用的端点?或者我可以用来实现此目的的任何其他ProviderInterface?不能修改令牌。向令牌中添加某些内容意味着创建一个具有附加角色或声明的新令牌。只要我能够向新令牌中添加附加角色和属性
标签: Jwt
nuxt.jsauth0hasura
成功登录后,在我的Nuxt应用程序中,我已从Auth0获得声明。Devtools控制台显示:
$vm0.$auth.$state.user['https://hasura.io/jwt/claims']
{x-hasura-default-role: "user", x-hasura-allowed-roles: Array(1), x-hasura-user-id: "auth0|5e989a*******"}
但是我的代币没有这个声明,所以我的hasura请求失败了。我在控制台中声明后立即
我正在尝试编写一个应用程序,代表用户将文件上传到一个BOX文件夹,但要使用JWT,这样最终用户就不会参与其中。该文件夹不属于该应用,但所有者允许该应用发布到该文件夹
在意识到管理员需要允许应用程序运行之前,我与标准的404 JWT错误进行了斗争
现有用户和内容
以及
允许您的应用程序代表使用
作为用户标题
及
允许应用程序为用户生成OAuth 2.0访问令牌
使用JWT授权,而不是用户提供凭据
一旦所有这些就绪,我的应用程序就可以以用户身份登录(查找用户id非常非常困难),并访问文件夹
问题是该
参考这一点,我可以在sublike中向我们的JWT令牌添加租户域名信息username@carbon.super
但我需要一种方法,将租户ID信息像索赔一样放入JWT。如何为IS 5.10.0执行此操作?IS OOTB不支持此操作。但是,您可以编写自定义索赔提供程序示例并将其部署到Identity Server中。参考此示例了解如何编写自定义索赔提供程序
如果是authorizationcode授权或刷新令牌授权流,
请参阅此实施和
如果是隐式granttype或混合流,请参考此
additi
我收到两个jwt:一个OpenID连接令牌(id\u令牌)和一个访问令牌(Access\u令牌)。OpenID的情况或多或少是清楚的-我可以使用JWKs端点对其进行验证:
如示例()所示:
问题是如何继续使用访问令牌。我可以从中提取userId和userDetails,但我想我还需要验证它
如果我尝试使用与令牌相同的方法,则会出现错误:unsolvableKeyException:无法为JWS找到合适的验证密钥,其中包含头{“alg”:“RS256”,“kid”:“1”}。事实上,“kid”没有
标签: Jwt
spring-security-oauth2
我们有一个微服务体系结构,使用JWT在服务之间进行身份验证。我希望能够轻松地从JWT中获取更多字段。目前真的只是当局被Spring Security直接曝光
我们的边缘服务/API网关创建的传递给下游服务的示例JWT(一些字段是我们的应用程序自定义的):
使用Spring Boot很容易做到这一点:
compile("org.springframework.boot:spring-boot-starter-security:1.3.1")
compile('org.springframework
如果我使用JWE发送一条加密的JSON消息,该消息将存储在客户端,用于授权,为什么客户端需要解密该消息
客户端将JWE令牌附加到所有请求。服务器使用JWE令牌标识客户端,并响应或拒绝请求。在整个过程中,只有服务器可以解密
如果这个结构没有问题,那么实现它的最佳方法是什么?我是否应该使用非对称加密而不提供公钥(这在JWE规范中是否可能)
沿着这些思路,什么是确保JWE令牌没有被截获,虽然没有被解密,但没有附加到恶意服务器请求,从而有效地允许攻击者模拟客户端的最佳方法
还有,我还遗漏了其他安全问题吗
标签: Jwt
asp.net-core-2.0c#-7.0jwt-auth
问题
如何使用自定义中间件在调用下一个上下文时获取响应体
到达wait_next行后,从调试调用(上下文)
不从操作结果getusermenu返回json数据
[HttpGet(Contracts.ApiRoutes.Security.GetUserMenus)]
public IActionResult GetUserMenu(string userId)
{
string strUserMenus = _SecurityService.GetUser
我在Angular中有一个SPA客户端,它成功登录Azure AD并生成一个令牌,然后通过Authorization:Bearer${token}将其传递给.Net Core3.0 API。我然后尝试使用[Authorize]验证令牌以检查并允许访问其余API调用,我们仍然使用ver:1.0,JWT头中没有nonce。我在ConfigureServices方法中有以下代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationSc
我目前正在使用Spring的RESTful后端。由于RESTful是无状态的,所以我决定使用JWT,因为在我的整个研究过程中,每个人都推荐使用JWT(至少对于基于REST的应用程序)
考虑到身份验证阶段的正常流程:
Frontend Backend
--- Login flow (refresh token request flow). ---
Login details
标签: Jwt
google-oauthspring-oauth2
我想使用SpringOAuth创建一个授权服务器,它能够发布自己的JWT令牌。授权服务器必须将身份验证委托给Google。我一直在遵循本教程,它几乎完成了我想要的一切:
我能够将Google添加为身份验证提供商,但我正在努力解决JWT部分的问题
以下是我的授权服务器配置:
@SpringBootApplication
@EnableOAuth2Client
@EnableAuthorizationServer
@Order(SecurityProperties.ACCESS_OVERRIDE_
我有一个通过初始登录的JWT令牌,它将在60分钟后过期。我想续订此令牌,以便用户不会注销
为此,我使用AcquireTokenAsync调用,并使用UserAssertion60分钟窗口
公共静态异步任务续订令牌(字符串resourceUri)
{
var authContext=新的AuthenticationContext(授权);
var authHeader=HttpContext.Current.Request.Headers[“Authorization”];
var userAcc
标签: Jwt
passport.jspassport-facebookexpress-jwt
我想使用passport github或facebook登录jwt令牌,而不使用服务器上的保存会话。
但我们有两个来自前端的请求:
app.get('/auth/facebook',
passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req,
我看到JWT令牌由A-Z、A-Z、0-9和特殊字符-和组成。我想知道JWT令牌中允许的字符列表?来自:“输出是三个以点分隔的Base64 URL字符串”
Base64有一个特定的名称,具体取决于使用编码的位置。典型的MIME base64将使用+/作为最后两个字符,但base64 URL()用于URL和文件名,因此使用-\u
因此,JWT将使用字符a–z、a–z、0–9和-.。或者,作为正则表达式:
[a-zA-Z0-9-_.]+
如果要改进正则表达式以匹配所述格式:
^[a-zA-Z0-9-
我已经通过用户流向我的B2C应用程序添加了一个用户属性“角色”
当我登录并重定向到时,我会得到一个响应,在“解码令牌”选项卡上显示“extension\u Role”:“Tester”,
但是,它没有列在“索赔”选项卡中
这只是显示的一个怪癖,还是我误解了用户属性和声明之间的区别
您还应该能够在“索赔”选项卡中获取自定义用户属性/自定义索赔。要验证是否创建具有自定义用户属性的用户,并且您将能够在解码令牌和索赔选项卡中同时获得索赔选项卡中的自定义用户属性/自定义索赔。为了进行交叉检查,我尝试使用自
如何从解码令牌读取电子邮件的值?将电子邮件附加到请求,然后您可以从控制器访问该值
jwt.verify(令牌、process.env.SECRETKEY、函数(err、decodedToken){
如果(错误)抛出新的禁止异常(“无效令牌”);
req.user=decodedToken//将令牌负载附加到请求
})
jwt.verify(token,process.env.SECRETKEY, function(err,decodedToken){
console.log(de
我需要知道最大的长度
JSON Web令牌(JWT)
在规范中没有关于它的信息。可能是这样,长度没有限制?正如您所说,RFC7519()或其他与JWS或JWE相关的RFC中没有定义最大长度
如果使用JSON序列化格式或JSON扁平序列化格式,则没有限制,也没有理由定义限制
但是如果您使用JSON压缩序列化格式(最常见的格式),您必须记住它应该尽可能短,因为它主要用于web上下文。4kb JWT是您应该避免的
注意只存储有用的声明和标题信息。我也一直在尝试查找这些信息
我会说-尝试并确保它低于7k
I使用流明(5.2)框架和jwt(1.0)
我得到一个令牌,但我不能刷新它,因为系统告诉我“该令牌已被列入黑名单”。我不知道是怎么解决的。你能帮帮我吗
原谅我,我的英语不是很好,可能在表达上有一些差异
路线
登录
刷新
身份验证服务提供商
我已经解决了这个问题
首先,我删除了jwt.refresh中间件。然后我使用JWT管理器刷新我的令牌
这是现在的代码
$app->group(['prefix' => 'auth', 'namespace' => '\App\Http\Con
我读了一些JWT教程,但它们没有讨论如何生成随机秘密
我用一个秘密生成JWT,然后我用同样的秘密生成另一个JWT如果有人已经知道我的秘密是什么
这不是意味着他可以伪造或修改信息并自己在JWT上签名,然后将其发送到我的服务器吗
为了解决这个问题,我想用一个随机的、唯一的秘密对JWT进行加密(并将随机秘密存储到我的数据库中,在加密字符串后面留下一个秘密索引),但是我应该吗有什么我想得太多的吗?没有,您不应该在每个JWT上都签上唯一的秘密,并将秘密存储在您的数据库中。如果您担心您的秘密会泄露,并希望通
我在React JS中有一个.net核心web api和SPA客户端。我想允许用户使用在Azure AD中注册的电子邮件从客户端登录,并使用JWT令牌保护我的web api。我试图用简单的硬编码用户名和密码生成令牌,但我不知道如何从Azure AD获取用户并生成JWT令牌
这是我的JWTController:
[Route("api/[controller]")]
public class JwtController : Controller
{
private readonly Jwt
我已集成passport jwt以进行身份验证。它的工作方式很有魅力,但每当前端的家伙从前端angular 2使用它时,它就会给出未经授权的401。我试了很多次,但没有得到任何线索,这一定是一个愚蠢的错误
我的护照策略文件为
let JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
//let fromHeader = require('pass
标签:elasticsearch Jwt
Kibana
elasticsearch-opendistro
我可以使用basic auth(使用内部用户数据库)运行open发行版,现在我需要使用JWT令牌对Kibana仪表板进行身份验证
Elasticsearch配置:
basic_internal_auth_domain:
http_enabled: false
transport_enabled: true
order: 4
http_authenticator:
type: basic
我在我的nestjs应用程序中使用jwt令牌,但当我运行我的项目并使用@UseGuards(AuthGuard())decorator调用控制器时,应用程序调试返回以下错误:
Cannot read property 'challenge' of undefined
而不是这一行:
@UseGuards(AuthGuard())
使用这个:
@UseGuards(AuthGuard('jwt'))
您必须导入PassportModule作为
imports: [
TypeOrm
我试图使用JWT令牌调用zoom API,但它返回:
{
"code": 200,
"message": "Account does not enabled REST API."
}
我使用的查询是:
POST https://api.zoom.us/v2/users
Headers:
Authorization: Bearer access_token
如何为我的zoom帐户启用REST api?如果您使用免费帐户,
我已经用nesjts“typeorm”编写了以下login模块
@Post('login')
public async login(@Body() data) {
return await this.authService.login( data);
}
它工作正常,并向我发送所需的结果(包含jwt令牌)
但是当我将@usegards(AuthGuard('jwt'))添加到这个服务的顶部时,我得到了错误401,未经授权的访问
我不明白它为什么会出现这个错误,因
标签: Jwt
thinktecture-ident-server
当OAuth客户端从identity server获取JWT令牌时,是否有任何方法可以确定
我担心当用户获取access_令牌并尝试使用base64对其进行解码时,用户可以修改令牌字符串
我的设想是:
我有两个门户网站A和B,它们都集成了Thinktecture identity server。
用户A只能使用“role:portalA”声明访问门户A,但无法访问门户B
如果用户A尝试登录门户A并获取访问令牌,则用户A将“role:portalB”添加到访问令牌中,然后再次使用base64编码。
我有一个OWIN Web Api,它需要ida:academyparam来验证JWT
public static void ConfigureAuth(IAppBuilder app)
{
var tvps = new TokenValidationParameters
{
ValidAudience = Config.GetSetting("ida:Audience"),
我读了很多关于stackOverflow和jwt文档的问题。
据我所知,现在我应该这样做来计算代币:
header =
{
"alg": "HS256",
"typ": "JWT"
}
payload =
{
"sub": "1234567890",
"name": "JohnDoe",
"iat": 1516239022
}
secret = "test123"
从标头和负载中删除不必要的空格和特征线,然后将两者编码为base64url
与jwt.io上的输出相同,非常
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 16 页