Я работаю над проектом, в котором требуется функция входа в систему единого входа. Я реализовал вход в систему единого входа AeroGear, но проблема в том, что он открывает веб-сайт аутентификации в браузере Safari (выходит из основного приложения и затем открывает браузер). Но я не хочу этого делать.оставить приложение для аутентификации, есть ли способ?Я могу использовать встроенное веб-представление в приложении, которое будет полезно для аутентификации пользователя в приложении.
Вот демонстрационный код, который я использую.( Здесь является источником кода примера)
import UIKit
import AeroGearHttp
import AeroGearOAuth2
let HOST = "http://localhost:8080"
extension String {
/// Encode a String to Base64
func toBase64() -> String {
return Data(self.utf8).base64EncodedString()
}
/// Decode a String from Base64. Returns nil if unsuccessful.
func fromBase64() -> String? {
guard let data = Data(base64Encoded: self) else { return nil }
return String(data: data, encoding: .utf8)
}
}
class ViewController: UIViewController {
var userInfo: OpenIdClaim?
var keycloakHttp = Http()
var images: [UIImage] = []
var currentIndex = 0
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from
a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func goPreviousImage(_ sender: UIButton) {
if self.currentIndex > 0 {
self.currentIndex -= 1
}
self.imageView.image = self.images[self.currentIndex]
}
@IBAction func goNextImage(_ sender: UIButton) {
if self.currentIndex < self.images.count - 1{
self.currentIndex += 1
}
self.imageView.image = self.images[self.currentIndex]
}
@IBAction func loginAsKeycloak(_ sender: AnyObject) {
let keycloakConfig = KeycloakConfig(
clientId: "sharedshoot-third-party",
host: HOST,
realm: "shoot-realm",
isOpenIDConnect: true)
let oauth2Module = AccountManager.addKeycloakAccount(config:
keycloakConfig)
self.keycloakHttp.authzModule = oauth2Module
oauth2Module.login {(accessToken: AnyObject?, claims:
OpenIdClaim?, error: NSError?) in
self.userInfo = claims
if let userInfo = claims {
if let name = userInfo.name {
self.nameLabel.text = "Hello \(name)"
}
}