首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vapor中使用API-Key

在Vapor中使用API-Key
EN

Stack Overflow用户
提问于 2018-11-23 23:38:59
回答 2查看 621关注 0票数 6

我正在用Vapor开发一个简单的web。为了提供更多的背景,我是后端开发方面的新手。

API的使用者将是一个iOS应用程序。目前,我不需要用户注册使用该应用程序。我想保持这样的状态。

另一方面,我希望进行一些身份验证,以避免任何人使用我正在开发的API。

为了寻找信息,我找到了如何实现身份验证。但是我看到的例子是基于在后端为应用程序的每个用户创建用户。我不想做的事。我想像我们通常使用第三方api时一样使用api密钥。

如何使用Vapor进行“api-密钥身份验证”??

或者,我是否应该创建一个唯一的用户/密码,由iOS应用程序(使用API)的所有用户共享,然后使用基本身份验证或令牌身份验证?

非常感谢!

卡洛斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-24 19:18:34

方法之一是创建一个假令牌,并使用TokenAuthenticationMiddleware或者更有可能使用自定义中间件来检查传入令牌。

但是,请注意,没有什么可以阻止任何人检查来自应用程序的流量来查看令牌,然后使用它访问您的API。

票数 5
EN

Stack Overflow用户

发布于 2019-01-20 19:18:24

按照this和图书服务器端Vapor的一个示例(由Raywenderlich.com教程团队编写),我创建了这个定制中间件来完成这项工作:

代码语言:javascript
复制
final class SecretMiddleware: Middleware {

let secret: String

init(secret: String) {
    self.secret = secret
}

func respond(to request: Request, chainingTo next: Responder) throws -> Future<Response> {

    guard let bearerAuthorization = request.http.headers.bearerAuthorization else {
        throw Abort(.unauthorized, reason: "Missing token")
    }

    guard bearerAuthorization.token == secret else {
        throw Abort(.unauthorized, reason: "Wrong token")
    }

    return try next.respond(to: request)
}
}
extension SecretMiddleware: ServiceType {

static func makeService(for worker: Container) throws -> SecretMiddleware {

    let secret: String
    switch worker.environment {
    case .development:
        secret = "foo"
    default:
        guard let envSecret = Environment.get("SECRET") else {
            let reason = "No SECRET set on environment."
            throw Abort(.internalServerError, reason: reason)
        }
        secret = envSecret
    }
    return SecretMiddleware(secret: secret)
}
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53453913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档