1

SSO ログイン機能が必要なプロジェクトに取り組んでいます。AeroGear SSO ログインを実装しましたが、Safari ブラウザで認証 Web サイトを開く (メイン アプリを終了してからブラウザを開く) という問題がありますが、アプリを離れたくありません。認証する方法はありますか?アプリ内に埋め込まれた Web ビューを使用できます。これは、アプリ内でユーザーを認証するのに役立ちます。

これが私が使用しているデモコードです。(サンプルコードのソースはこちら)

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)"
            }
        }
4

1 に答える 1