首页 > 解决方案 > Auth0 Swift SDK .authentication().login 返回无效令牌

问题描述

我最近开始了一个使用 Auth0 的新项目,我在其中将 iOS 应用程序添加到现有的 Web 应用程序项目中。Web 应用程序使用机器来处理 Auth0 应用程序,我们添加了一个 Auth0 原生应用程序来处理 iOS 身份验证。

如果我使用 .webauth() 调用,一切都会按预期工作。webauth 返回一个有效的令牌,并通过断点,我按照代码查看它是否通过了 PKCE 过程。

我想知道的问题是是否可以使用 Swift SDK 和 .authentication().login 来获取有效令牌,以便我可以创建自定义登录页面。设计师的要求是这样的,定制就是我们所需要的。

目前,如果我只使用 .authentication().login 调用它会返回一个无效的令牌。我可以看到这个流程不遵循 PKCE 协议并返回一个令牌,其标头表示它是用 RS256 签名的,而实际上它是用 HS256 签名的。

我看到我可以在哪里通过 RESTful 调用(并使用 webview ......)实现 PKCE 身份验证,但我认为使用提供的 swift SDK 是可能的。任何提示或帮助将不胜感激。

使用 Auth0.Swift 1.2.2、Xcode 10 beta、ios 11、swift 4。

webauth 调用:

Auth0
   .webAuth()
   .connection("MY-CONNECTION)
   .audience("https://myapp.auth0.com/userinfo")
   .start { result in
        switch result {
        case .success(let credentials):
            print("credentials: \(credentials)")
        case .failure(let error):
            print(error)
         }
     }

身份验证()调用:

 Auth0
    .authentication()
    .login(
        usernameOrEmail: "me@mycompany.com",
        password: "password",
        realm: "MY-CONNECTION",
        audience: "https://myapp.auth0.com/userinfo",
        scope: "openid")
    .start { result in
        switch result {
        case .success(let credentials):
            print("Obtained credentials: \(credentials)")
        case .failure(let error):
            print("Failed with \(error)")
        }
}

谢谢,

标签: iosswiftauth0

解决方案


有人向我指出,创建自定义 Auth0 登录基本上违背了 Auth0 试图提供的安全性。它将用户名和密码的处理从 Auth0 手中夺走,并将它们重新交由应用程序的创建者处理。

因此,自定义登录不应该是设计的一部分。尽管它缺乏可定制性,但我将实施 .lock 登录流程,以避免在我的应用程序中使用 Web 登录。

只是想把它放在这里,以防其他人遇到我的情况。


推荐阅读