我正在使用提供OAuth2.0身份验证的服务。这是我需要的步骤:
第三点是我的主要问题。
我已经使用Microsoft库实现了OAuth,并且一切正常。但是我不能在这里使用它们,因此我正在尝试https://github.com/OAuthSwift/OAuthSwift。
这是我的代码:
private func authenticationService() {
// create an instance and retain it
let oauthswift = OAuth2Swift(
consumerKey: "xx",
consumerSecret: "xxx",
authorizeUrl: "//myurl + userId",
responseType: "token"
)
oauthswift.authorizeURLHandler = OAuthSwiftOpenURLExternally.sharedInstance
let handle = oauthswift.authorize(
withCallbackURL: "???",
scope: "", state:"") { result in
switch result {
case .success(let (credential, response, parameters)):
print(credential.oauthToken)
// Do your request
case .failure(let error):
print(error.localizedDescription)
}
}
}
这可以正确打开我的Safari,但随后我被重定向到哈希中带有访问令牌的URI,没有任何反应。
这里的主要问题是我有一个重定向uri,所以我想未调用回调URL?这不是打开工作表,而是重定向到Safari。我不喜欢这种方法。
如何通过上述步骤快速执行OAuth2.0?如何从URL获取访问令牌?最好的图书馆是什么?如何充分利用它?
更新:
这是我的stackExchange代码:
let request: OAuth2Request = .init(authUrl: "https://stackexchange.com/oauth/dialog?client_id=<MYCLIENTID>&scope=private_info&redirect_uri=https://stackexchange.com/oauth/login_success",
tokenUrl: "https://stackoverflow.com/oauth/access_token/json",
clientId: "<MYCLIENTID>",
redirectUri: "https://stackexchange.com/oauth/login_success",
clientSecret: "",
scopes: [])
堆栈应用程序中的OAuth域是=> stackexchange.com,因此我在URL中添加了以下内容:redirect-uri:// <stackexchange.com>(甚至没有<>)
但是,每次我批准我的应用程序时,我都会堆积在包含我的令牌的“授权应用程序”中,并且我不会被重定向。
如果你以iOS 13为目标,则可以使用Apple提供的新AuthenticationServices库。
它可以在macOS和iOS上运行。
也许这会对其他开发人员有所帮助,我创建了一个简单的小型swift包来处理Swift中的OAuth2,你可以检查演示项目是否运行良好👍
https://github.com/hadiidbouk/SimpleOAuth2
编辑:
你传递的网址错误,它们应该像这样
let request: OAuth2Request = .init(authUrl: "https://stackoverflow.com/oauth",
tokenUrl: "https://stackoverflow.com/oauth/access_token/json",
clientId: "<<your client id>>",
redirectUri: "redirect-uri://stackexchange.com",
clientSecret: "<<your client secret>>",
scopes: ["private_info"])
这非常有趣,我正在尝试。我正在尝试通过StackExchange实现OAuth,但是我真的不知道该怎么做。我添加了所有必需的信息,但是一旦“授权”页面提示并单击它,我将重定向到新页面,并且我无法关闭“身份验证表”以获取令牌。您是否尝试过StackExchange?我真的很感谢任何帮助
我只尝试了GitLab,将尝试StackExchange并与您联系👍🏻
现在可以正常工作了,您可以使用该软件包的1.0.4版本,将OAuth2Credentials结构更改为RFC 6749 OAuth 2.0 tools.ietf.org/html/rfc6749#section-5.1中定义的结构。StackExchange返回“ expires”,但推荐的一个是“ expires_in”,因此我在新版本中对此进行了处理。PS:要进行重定向,您需要在target> info> URL Types中注册方案。诸如“ redirect-uri:// << stackApps上的您的域>>”之类的东西将起作用。告诉我它现在是否对您有用,是否需要编辑库,我总是可以进行修改,因为我在应用程序中使用它
另外,请不要忘记使用访问令牌响应的JSON格式“ stackoverflow.com/oauth/access_token/json ”
你真好。我非常感谢您的帮助,并且不愿意与您分享您的图书馆。但是我仍然面临这个问题,我用所有详细信息更新了我的答案。您尝试了StackExchange Oauth对吗?而且我在工作吗?我的更新和您的代码之间有什么区别吗?