gpt4 book ai didi

ios - 使用 SFAuthenticationSession 将用户登录到 Microsoft Graph

转载 作者:行者123 更新时间:2023-11-28 10:42:40 25 4
gpt4 key购买 nike

我一直在使用 p2-oauth2库之前能够通过 safariViewController 登录,但自从最新的 iOS 版本 (11.3) 以来,我发现当用户尝试登录时我的应用程序一直崩溃。我没有我没有收到任何错误消息,但过了一会儿我发现 SFAuthenticationSessions 是使用 SSO(单点登录)的方法。

我的旧代码非常像这样(使用 p2_oauth2):

static var oauth2 = OAuth2CodeGrant(settings: [
"client_id": "myClientID",
"authorize_uri": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
"token_uri": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
"scope": "User.Read Mail.Read Calendars.ReadWrite Calendars.Read Calendars.Read.Shared Offline_access",
"redirect_uris": ["myRedirectURI"],
"keychain": true
])

func loginToOffice365(completion: @escaping (_ error: Error? ) -> ()) {
var userDataRequest: URLRequest {
var request = URLRequest(url: URL(string: "https://graph.microsoft.com/v1.0/me/")!)
request.setValue("Bearer \(OauthManager.oauth2.accessToken ?? "")", forHTTPHeaderField: "Authorization")
return request
}

alamofireManager.request(userDataRequest).validate().responseJSON {
(response) in
switch response.result {
case .success( _):
//Handle user information
completion(nil)
case .failure(let error):
completion(error)
}
}
}

我试图在我的项目中的 SFAuthenticationSession 中实现,它需要一个 URL 作为参数。因此,我一直在搜索 Microsoft URL 一段时间,以便可以在同一 URL 中发送 clientId、scope 和 redirectURI。到目前为止,这是结果:

let url = URL(string: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?state=78E99F6B&response_type=code&scope=User.Read+Mail.Read+Calendars.ReadWrite+Calendars.Read+Calendars.Read.Shared&redirect_uri=MYREDIRECTURI&client_id=MYCLIENTID")!
OauthManager.authenticationSession = SFAuthenticationSession(url: url, callbackURLScheme: nil, completionHandler: { (successUrl: URL?, error: Error?) in
if let error = error {
print(error)
completion(error)
} else {
var accessToken = ""
if let absolutString = successUrl?.absoluteString, let urlComponents = URLComponents(string: absolutString)?.query {
accessToken = urlComponents
}
print(accessToken)
completion(nil)
}
})
OauthManager.authenticationSession?.start()

现在我终于收到了来自 Microsoft 的访问 token 。但是我应该从这里去哪里呢?如何获取刷新 token ,以便开始调用 Microsoft 图形 API 调用?

如果您知道任何更好的解决方案或任何建议,我将很高兴收到它们!这是我使用登录的第一个项目,因为我对 Swift 还很陌生。

更新:

我还可以提到 Microsoft 文档建议使用这些库:

  • Microsoft 身份验证库 (MSAL) 客户端库是适用于 .NET、JavaScript、Android 和 Objective-C。全部平台处于生产支持的预览中,并且,在事件中引入了重大更改,Microsoft 保证了一条通往升级。
  • Microsoft 的服务器中间件可用于 .NET Core 和ASP.NET(OWIN OpenID Connect 和 OAuth)和 Node.js(MicrosoftAzure AD Passport.js)。
  • v2.0 端点与许多第三方身份验证兼容图书馆。

https://developer.microsoft.com/en-us/graph/docs/concepts/auth_overview

我已经尝试过 MSAL 和 AppAuth,但他们没有给我任何回复。

最佳答案

@Paulw11 找到了答案。

我使用的方法在 XCode 9.3 和 iOS 11.3 之前都运行良好:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return true
}

但是我不得不改成下面的方法让它工作:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}

关于ios - 使用 SFAuthenticationSession 将用户登录到 Microsoft Graph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49773318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com