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

Swift中使用Wordpress REST API的JWT认证

闽念
2023-03-14

我正在尝试通过Swift向我的Wordpress博客发布帖子。我正在使用带有JavaWeb令牌(JWT)身份验证的Wordpress REST API。第一步是使用HTTP POST方法将用户凭据传递给服务器。然后服务器返回一个JSON对象,其中包含身份验证所需的JWT令牌。我可以使用Postman等REST API程序让这一切正常工作,但我对Swift代码有问题。

我的凭据发送得很好,服务器返回一些数据,但我无法从此数据中获取令牌。

这个Swift代码是由Postman应用程序生成的:

import Foundation

let headers = [
  "Content-Type": "application/json",
  "cache-control": "no-cache",
]
let parameters = [
  "username": "myUsername",
  "password": "myPassword"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://myDomain/wp-json/jwt-auth/v1/token")! as URL,
                                    cachePolicy: .useProtocolCachePolicy,
                                timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

当我在Postman中执行HTTP POST命令时,我得到了这个JSON:

{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvY3F1aWNrLmNhIiwiaWF0IjoxNTQ3Njc3MDMzLCJuYmYiOjE1NDc2NzcwMzMsImV4cCI6MTU0ODI4MTgzMywiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMyJ9fX0.DgxmmSFKnEdXuWi5EiBk1BpFvWrD57KIE8TiWazId-4",
"user_email": "myEmail",
"user_nicename": "myUsername",
"user_display_name": "myUsername"
}

使用Swift能得到同样的结果吗?我猜想这是由session.dataTask方法返回的,我只是不知道如何解析它。

共有2个答案

盖锐
2023-03-14

我知道这是一篇老文章,但我正在尝试将我的JWT-AUTH REST API与Swift中的WordPress一起使用。我已经获得了一个令牌,但是,我想知道如何使用它访问某些受保护的页面?ie:这是我的网站。com/user page/USERNAME,其中USERNAME是用户的名称,仅当用户使用该用户名登录时才提供对tis页面的访问。

我试着以邮递员的身份投递信物,但没有成功!

易琨
2023-03-14

好的,所以答案是将其添加到session.dataTask方法(在 else 闭包中)。

let jsonObject = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
            let query = jsonObject["token"] as! String
            print(query)
 类似资料:
  • 本文向大家介绍ASP.Net Core3.0中使用JWT认证的实现,包括了ASP.Net Core3.0中使用JWT认证的实现的使用技巧和注意事项,需要的朋友参考一下 JWT认证简单介绍 关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构。 JWT主要由三部分组成,如下: HEADER 包含token的元数据,主要是加密算法,和签名的类型,如下面的信息,说明了 加密的对象类型是JWT

  • 我将使用Laravel框架构建micrservices。我有用户微服务,它处理客户端凭证并验证它们(为客户端创建JWT)。此外,还有另一种需要用户认证的微服务。 问题是,如果秘密访问令牌密钥仅在用户微服务中,我如何验证客户端在微服务(用户微服务除外)中的访问令牌?或者,我应该在每个微服务中保留密钥吗?

  • 我创建了一个小型vertx auth服务器,它使用公钥/私钥签名/生成JWT令牌。 现在,当我从客户端访问/api/new token时,我从上面的身份验证服务器获得了一个JWT令牌。然而,我有一些悬而未决的问题: auth-server如何确保客户端具有服务器公钥并且它是真实的? 客户端如何向auth-server发送公钥? 我怎样才能让 /api/new-token安全,只有合法的客户端可以连

  • 本文向大家介绍ASP.NET Core使用JWT认证授权的方法,包括了ASP.NET Core使用JWT认证授权的方法的使用技巧和注意事项,需要的朋友参考一下  demo地址: https://github.com/william0705/JWTS 名词解析 认证 : 识别用户是否合法 授权: 赋予用户权限 (能访问哪些资源) 鉴权: 鉴定权限是否合法 Jwt优势与劣势 优势 1、 无状态 tok

  • 我们在 remember-me-hash上,基于 Form 表单的方式,来实现基于散列的令牌方法的 Remember-Me 认证,我们新建一个 jwt-authentication项目。 build.gradle 修改 build.gradle 文件,让我们的remember-me-hash项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName

  • 我试图在laravel中安装jwt身份验证,但我使用Laravel5.8和jwt,如下所示https://tutsforweb.com/restful-api-in-laravel-56-using-jwt-authentication/ ,但向我显示此错误。 我的供应商/tymon/jwt auth/src/jwt.php中有任何问题吗 第182行和第200行之间 我发现了这个建议,并遵循了La