0

사용자를 가로 채서 로그인 한 다음 사파리로 보내고 인증 요청없이 페이지를로드하려고합니다.NSURLConnection 자격 증명을 Safari와 공유하는 방법은 무엇입니까?

그래서, 내가 지금까지 뭘하는지 ...

나는 내 응용 프로그램에 대한 사용자 정의 URL 체계를 등록합니다. 그것을 "myhttp"라고 부르십시오. 이제 누군가 myhttp : //secured.com/foo 링크 (전자 메일에서 말하기)를 클릭하면 내 응용 프로그램이 실행됩니다. 앱은 어딘가에서 사용자 자격 증명을 가져오고 NSURLConnection으로 실제 URL을 호출합니다. NSURLConectionDelegateconnection:didReceiveAuthenticationChallenge을 구현하고 보안 레이어를 잘 탐색합니다. 다음으로 UIApplication openURL 메서드를 사용하여 동일한 URL을로드하여 Safari를 가져 오려고 시도하지만 여전히 인증 확인을받습니다.

Apple 설명서에서 다음 내용을 읽었 기 때문에이 방법이 효과가 있다고 생각했습니다.

Credentials stored in persistent storage are kept in the user’s keychain and shared among all apps.

그리고 나는 NSURLCredentialStorage가 난 그냥 등 올바른 정보 보호 공간, 구조, 거기 저장에 사용되는 자격 증명을 볼 수 확인,하지만 분명히 내가 뭔가 잘못하고 있어요하거나 그럴 것 Safari로 전환하면 인증 문제가 발생합니다.

그래서 문제는 내가 어딘가에 라인을 따라 잡았거나, 중요한 비트를 잊어 버렸을 까? 아니면 내가 잘못된 방향으로 가고있는 것인가?

답변

1

iOS 8 이전에는 불가능했지만 지금은 Shared Web Credentials 기능입니다.

앱에 com.apple.developer.associated-domains 수여 대상을 추가하십시오. 이 자격 부여에는 자격 증명을 공유하려는 모든 도메인이 포함되어야합니다.

apple-app-site-association 파일을 웹 사이트에 추가하십시오. 이 파일은 사이트 이 자격 증명을 공유하고자하는 모든 앱의 애플리케이션 식별자를 포함해야하며 올바르게 서명되어야합니다.

앱을 설치하면 연결된 도메인별로 연관 파일을 다운로드하고 확인합니다. 확인에 성공하면 앱이 도메인과 연결됩니다.

앱은 SecAddSharedWebCredentialSecRequestSharedWebCredential을 호출하여 연결된 도메인과 자격 증명을 공유 할 수 있습니다.

+0

그리고 왜 그런지 설명하기 위해 공유되는 자격 증명에 대한 문서의 주석이 매우 오래되었습니다. OS X에만 적용되며 iOS에는 적용되지 않습니다. OS X에서는 키 체인이 공유되며 ACL은 각 앱에 액세스 할 수있는 앱을 제한합니다. 앱이 액세스 할 수없는 권한을 사용하도록 요청하면 OS는 사용자에게 권한을 요청합니다. iOS에서 키 체인은 기본적으로 앱마다 있습니다 (키 체인 액세스 그룹과 같은 여러 가지 예외가 있음). – dgatwood