Agent skill · Audited from source
authentication
skill · dpearson2699/swift-ios-skillsNOASSERTION licenceAudited 29 Oct 2026 · source 8c7069c512a0
Is it safe? With care — CAUTION, grade B (89/100). We read this skill's source at commit 8c7069c512a0 and found no filesystem, network or shell access and no hard-coded secrets. The audit raised 2 findings, 1 critical or high. What it does: Implement iOS authentication flows with AuthenticationServices and LocalAuthentication. Use when building Sign in with Apple, passkey/WebAuthn registration or sign-in with…
Cite
Cite this page
ModelsAtlas. “authentication (dpearson2699/swift-ios-skills)”. Retrieved 29 Oct 2026. https://modelsatlas.com/skills/dpearson2699/authentication
2 skills are called “authentication”. You are viewing dpearson2699/swift-ios-skills. 1 of them is BLOCK.
- dpearson2699/swift-ios-skills★ 1.2k!CAUTION
- BuilderIO/agent-native★ 7.2k✕BLOCK
Trust audit
Audit 0.4.1 · source read 29 Oct 2026
CAUTION means the audit found things worth knowing before you trust this skill. Grade B is shared by 13,985 of 14,816 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 0 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | NA | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | FAIL | 2 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (2)
HIGHPrompt injectionprompt.credential_read · SKILL.md:306
- Storing identity tokens, authorization codes, access tokens, passwords, or
- Why
- asks the agent to read credentials
- Fix
- —
LOWPrompt injectionprompt.credential_read · references/keychain-biometric.md:112
private keys, or high-value credentials, bind access to the Keychain item with
- Why
- asks the agent to read credentials
- Fix
- —
Audit 0.4.1 · source sha 8c7069c512a0 · 29 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publisherdpearson2699 GitHub userOwner of the repository this skill is read from
- Source folderdpearson2699/swift-ios-skills/skills/authenticationThe exact folder we audited
- LicenceNOASSERTIONAs the repository states it
- Commit pinned for this verdict8c7069c512a0A new audit runs when the source changes
- Repository statusNot archivedLast push 89 days ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Implement iOS authentication flows with AuthenticationServices and LocalAuthentication. Use when building Sign in with Apple, passkey/WebAuthn registration or sign-in with…
---
name: authentication
description: "Implement iOS authentication flows with AuthenticationServices and LocalAuthentication. Use when building Sign in with Apple, passkey/WebAuthn registration or sign-in with ASAuthorizationPlatformPublicKeyCredentialProvider, ASAuthorizationController credential state and revocation handling, ASWebAuthenticationSession OAuth or third-party login, Password AutoFill, identity-token server validation, or local biometric re-authentication with LAContext."
---
# Authentication
Implement authentication flows on iOS using the AuthenticationServices
framework, including Sign in with Apple, passkeys, OAuth/third-party web
auth, Password AutoFill, and biometric re-authentication.
## Contents
- [Sign in with Apple](#sign-in-with-apple)
- [Credential Handling](#credential-handling)
- [Credential State Checking](#credential-state-checking)
- [Token Validation](#token-validation)
- [Existing Account Setup Flows](#existing-account-setup-flows)
- [Passkeys](#passkeys)
- [ASWebAuthenticationSession (OAuth)](#aswebauthenticationsession-oauth)
- [Password AutoFill Credentials](#password-autofill-credentials)
- [Biometric Authentication](#biometric-authentication)
- [Security Boundaries](#security-boundaries)
- [SwiftUI SignInWithAppleButton](#swiftui-signinwithapplebutton)
- [Common Mistakes](#common-mistakes)
- [Review Checklist](#review-checklist)
- [References](#references)
## Sign in with Apple
Add the "Sign in with Apple" capability in Xcode before using these APIs.
### UIKit: ASAuthorizationController Setup
```swift
import AuthenticationServices
final class LoginViewController: UIViewController {
func startSignInWithApple() {
let provider = ASAuthorizationAppleIDProvider()
let request = provider.createRequest()
request.requestedScopes = [.fullName, .email]
let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self
controller.presentationContextProvider = self
controller.performRequests()
}
}
extension LoginViewController: ASAuthorizationControllerPresentationContextProviding {
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
view.window!
}
}
```
### Delegate: Handling Success and Failure
```swift
extension LoginViewController: ASAuthorizationControllerDelegate {
func authorizationController(
controller: ASAuthorizationController,
didCompleteWithAuthorization authorization: ASAuthorization
) {
guard let credential = authorization.credential
as? ASAuthorizationAppleIDCredential else { return }
let userID = credential.user // Stable, unique, per-team identifier
let email = credential.email // nil after first authorization
let fullName = credential.fullName // nil after first authorization
let identityToken = credential.identityToken // JWT for server validation
let authCode = credential.authorizationCode // Short-lived code for server exchange
// Save userID to Keychain for credential state checks
// See references/keychain-biometric.md for Keychain patterns
saveUserID(userID)
// Send identityToken and authCode to your server
authenticateWithServer(identityToken: identityToken, authCode: authCode)
}
func authorizationController(
controller: ASAuthorizationController,
didCompleteWithError error: any Error
) {
switch (error as? ASAuthorizationError)?.code {
case .canceled, .notInteractive:
break
case .failed:
showError("Authorization failed")
default:
showError("Authorization failed: \(error.localizedDescription)")
}
}
}
```
## Credential Handling
| Credential data | Required handling |
|---|---|
| `user` | Persist this stable, per-team identifier for credential-state checks. |
| `email`, `fullName` | These optional values arrive only on first authorization; cache them immediately. |
| `identityToken`, `authorizationCode` | Send them to the server for validation or exchange; never trust them as client-side proof. |
Treat `realUserStatus` only as a fraud-prevention signal, not authentication
proof.
## Credential State Checking
Check credential state on every app launch. The user may revoke access at
any time via Settings > Apple Account > Sign-In & Security.
```swift
func checkCredentialState() {
let provider = ASAuthorizationAppleIDProvider()
guard let userID = loadSavedUserID() else {
showLoginScreen()
return
}
provider.getCredentialState(forUserID: userID) { state, _ in
DispatchQueue.main.async {
switch state {
case .authorized:
proceedToMainApp()
case .revoked:
// User revoked -- sign out and clear local data
signOut()
showLoginScreen()
case .notFound:
showLoginScreen()
case .transferred:
// App transferred to new team -- migrate user identifier
migrateUser()
@unknown default:
showLoginScreen()
}
}
}
}
```
### Credential Revocation Notification
```swift
NotificationCenter.default.addObserver(
forName: ASAuthorizationAppleIDProvider.credentialRevokedNotification,
object: nil,
queue: .main
) { _ in
// Sign out immediately
AuthManager.shared.signOut()
}
```
## Token Validation
The `identityToken` is a JWT. Send it to your server for validation --
never trust it client-side alone.
Server-side, validate the JWT against Apple's public keys at
`https://appleid.apple.com/auth/keys` (JWKS). Verify: `iss` is
`https://appleid.apple.com`, `aud` matches your bundle ID, and `exp` has not
passed. Exchange the short-lived authorization code on the server and store
the resultinExcerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit 8c7069c
git clone https://github.com/dpearson2699/swift-ios-skills git -C swift-ios-skills checkout 8c7069c512a0
The author documents no install command, so this uses the repository directly. Our verdict covers commit 8c7069c512a0 only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- !CAUTION B 89 / 100
first audit · source
8c7069c512a0
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/dpearson2699/authentication/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All design & front-end skills →dpearson2699/swift-ios-skills
Create media playback experiences using AVKit. Use when adding video players with AVPlayerViewController, enabling Picture-in-Picture, routing media with AirPlay, using SwiftUI VideoPlayer views, configuring transport…
dpearson2699/swift-ios-skills
Support automatic audio switching for paired third-party Bluetooth headphones or earbuds with AudioAccessoryKit. Use when a companion app registers an audio accessory, an app extension reports worn/removed placement or…
dpearson2699/swift-ios-skills
Transfer app data to or from other platforms using AppMigrationKit. Use when implementing system-orchestrated one-time migration between iOS and Android or another platform, building an AppMigrationExtension, packaging…
dpearson2699/swift-ios-skills
Audits App Store submission readiness and rejection risk across current review guidelines, PrivacyInfo.xcprivacy and required-reason APIs, privacy labels, ATT, StoreKit payments, metadata, entitlements, widgets, and…
dpearson2699/swift-ios-skills
Build private, on-device AI features on iPhone, iPad, and Mac with Foundation Models, Core ML, MLX Swift, or llama.cpp. Use when choosing an Apple-local model runtime, building an Apple Intelligence chatbot or…
dpearson2699/swift-ios-skills
Optimize App Store product pages for search visibility and conversion. Use for App Store Optimization (ASO), keyword research, app name/subtitle/keyword-field strategy, conversion-focused descriptions and promotional…
Add this badge to your README
[](https://modelsatlas.com/skills/dpearson2699/authentication/)
<a href="https://modelsatlas.com/skills/dpearson2699/authentication/"><img src="https://modelsatlas.com/skills/dpearson2699/authentication/badge.svg" alt="ModelsAtlas: CAUTION B"></a>
Questions about authentication
What does the authentication skill do?
Is authentication safe to install?
What can authentication access on my machine?
How current is this page?
Sources
- github.com/dpearson2699/swift-ios-skills/tree/main/skills/authen — the audited source at commit 8c7069c512a0 and every finding aboveObserved · 29 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the authentication skill do?
- Is authentication safe to install?
- What can authentication access on my machine?