iOS 부품에서 인증된 API 요청을 보내는 방법
Keychain Sharing은 서로 다른 어플리케이션 간의 Keychain을 공유합니다.
인증된 API 요청을 iOS 부품으로 요청하고 싶지만 로그인 처리 등 UI를 사용할 수 없습니다.로그인 처리는 프로그램에서 진행되며, 어떤 방식으로 세션 영패 등 인증 정보를 작은 프로그램에 공유할 수 있습니다.이번에는 Keychain을 사용했습니다.
iOS에서 애플리케이션 호스트와 애플릿 확장은 서로 다른 애플리케이션으로 간주되므로 애플리케이션이 관리하는 Keychain에 작은 애플리케이션에서 액세스할 수 없습니다."Keychain Sharing을 사용하여 응용 프로그램에서""공유""Keychain이 필요합니다."
Keychain Sharing에 대해 이 글을 참고했습니다.
응용 프로그램 본체를 활성화하는 Keychain Sharing
Capabilities 구성
Xcode에서 항목을 선택한 후 응용 프로그램 바디의 대상을 선택하고 "Capabilities"탭에 "Keychain Sharing"을 추가합니다.
키샤인 그룹란에는 이번에 공유한 키샤인의 그룹명이 추가됐다.WidgetSharing Group으로
Enitlements 설정
Enitlements를 열고 Keychain Access Group 키를 추가합니다. 값은 $(AppIdentifier Prefix) WidgetSharing Group입니다.이 문자열은 방금 Capabilities에서 설정한 그룹 이름 앞에 적용 ID를 삽입하는 문자열입니다.
Keychain Access Group에는 Application ID(Team ID)가 포함되어야 하므로 Keychain의 공개 범위는 동일한 소스의 애플리케이션으로 제한됩니다.
애플릿 확장에서 Keychain Sharing 사용
Widget에서도 Keychain Sharing을 활성화해야 합니다.Xcode 대상에서 Widget Extension을 선택하여 응용 프로그램 자체와 마찬가지로 Keychain Sharing을 설정합니다.Keychain의 그룹 이름은 응용 프로그램 바디와 같습니다.
부품 코드로 공유된 Keychain 액세스
KeychainAccess 가져오기
부품에서 Keychain에 액세스하기 위해 Cocoapeds의 KeychainAccess를 가져왔습니다.
Podfile에 설명을 추가하여 부품에 CocoPods 패키지를 도입합니다.
Podfile
target 'WidgetExtension' do
use_frameworks!
pod 'KeychainAccess', '~> 4.2'
end
getTimeline()에서 Keychain 액세스
부품 컨텐트는 getTimeline()에서 생성됩니다.KeychainAccess를 사용하십시오.매개변수 "accessGroup"에서 응용 프로그램 주체가 공유하는 Keychain 그룹을 지정합니다.
Widget.swift
struct SessionToken: Codable {
var sessionToken: String
var expiredAt: Int
var refreshToken: String
}
func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
(...途中省略...)
let keychain = Keychain(service: "app", accessGroup: "(Entitilementsに追加した、AppIDを含むグループ名)")
let result = try! keychain.getData("(取得したいデータのキー)")
guard let sessionTokenJSON = result else { return }
let decoder = JSONDecoder()
let sessionToken = try? decoder.decode(SessionToken.self, from: sessionTokenJSON)
}
총결산
부품의 타임라인이 생성되면 Keychain에서 세션 토큰을 꺼낼 수 있습니다.이 토큰을 사용하여 API 서버에 액세스하여 표시 데이터를 얻을 수 있습니다.
로그인 화면을 설치할 수 없는 iOS 애플릿에 인증 API 요청이 허용되었습니다.이 글은 토큰 리셋 등의 처리를 생략했지만, 위젯에서 토큰이 업데이트되면 새 토큰 주체가 적용하는 KeyChain에 다시 기록해야 한다.
이 블로그를 처음 읽는 사람에게: U-motion은 무엇입니까?
유모션은 소 목에 있는 센서를 이용해 활동 내용을 기록하고, AI의 힘으로 건강 상태를 분석해 축산 농가의 감시 시스템을 지원한다.
U-motion Development 는
개발 중입니다.이 계정은 개발 당시 얻은 지식을 공개했다.
Reference
이 문제에 관하여(iOS 부품에서 인증된 API 요청을 보내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/u_motion/articles/3bd96be9d60b91텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)