I am using SFAuthorizationPluginView in my Security agent plugin. My code expects that its willActivate method be called. With normal screensaver unlock, this works fine. However if I enter an invalid password, then enter the correct password, I never get the willActivate call. I have reproduced this with Quinn's LoginUIAuthPlugin from the QAuthPlugins example code.
My mechanisms look like this with LoginUIAuthPlugin:
mechanisms
HyprAuthPlugin:invoke
builtin:authenticate,privileged
PKINITMechanism:auth,privileged
LoginUIAuthPlugin:login
CryptoTokenKit:login
I would like to be able to get my plugin working properly when the user had previously entered an invalid password.
Prioritize user privacy and data security in your app. Discuss best practices for data handling, user consent, and security measures to protect user information.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi everyone,
I’m working on adapting our app to iOS 26’s new passkey feature, specifically Automatic Passkey Upgrades.
https://developer.apple.com/videos/play/wwdc2025/279/
Our app already supports passkey registration and authentication, which have been running reliably in production. We’d like to extend passkey coverage to more users.
According to the WWDC session, adding the parameter requestStyle: .conditional to createCredentialRegistrationRequest should allow the system to seamlessly upgrade an account with a passkey. However, in my testing, I consistently receive the following error:
Error | Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1001 "(null)"
Test environment:
Xcode 26.0 beta 4 (17A5285i)
iPhone 11 running iOS 26.0 (23A5297n)
Questions:
Is the Automatic Passkey Upgrades feature currently available in iOS 26?
I understand that the system may perform internal checks and not all upgrade attempts will succeed. However, during development, is there a way to obtain more diagnostic information? At the moment, it’s unclear whether the failure is due to internal validation or an issue with my code or environment.
Thanks.
Hi,
I hope someone is able to help me with this query:
Is there a mandatory requirement to display a view before presenting the App Tracking Transparency modal to explain to the user why the app is asking for tracking? I see there are a few apps which do this, but I don't see any mention of this as a mandatory requirement within the app store review guidelines. The modal can be customised with a description detailing why the app is asking for tracking and I believe this may be sufficient to pass an app store review.
The guidelines also mention that the app must provide access to information about how and where the data will be used. We have these details in our privacy policy which is accessible from within the app. Is this sufficient or do we need a pre-modal view which contains a direct link the the privacy policy.
Any advice on this would be much appreciated.
I've just implemented Sign-In-With-Apple and everything is working perfectly, but my app seems to be in some strange state where users are unable to remove it from the Sign-In-With-Apple section of their settings.
Things I've tried:
-- Deleting from Mac. (It just stays in the list)
-- Deleting from the iPhone (It stays in the list)
-- Deleting from account.apple.com (same issue)
-- I've noticed in the browser inspector tools I receive a 200 on the DELETE request, but the app remains.
-- Multiple users
Also have tried:
-- Revoking the token through the REST API
-- I get an email saying the token has been revoked, but it's still working
-- Same code, different app id (works fine!)
It seems like maybe my app is in some sort of weird state? Has anyone come across this before?
Hi ,
I have a requirement like,
Develop an app for iPad and app uses .net core apis.
App will be in kiosk mode, and app doesn't have any type of authentication even OTP also.
As the apis will be publishing to all over internet, how can we achieve security to apis?
Kindly provide suggestions for this implementation
Would really appreciate support with this invalid_client issue:
I have a web app and have aligned the JWT Header and Payload
JWT Header
{
"alg": "ES256",
"kid": "ABC123DEFG"
}
JWT Payload
{
"iss": "DEF123GHIJ",
"iat": 1234567890,
"exp": 1234567890,
"aud": "https://appleid.apple.com",
"sub": "com.yourapp.service"
The domains and callback are aligned and correct
I've even created a new p8 and updated the Key_ID
Sending Credentials to Apple (Token Request) Content-Type: application/x-www-form-urlencoded
However, still no luck. Can anyone assist with identifying the possible error?
Many thanks
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Tags:
Sign in with Apple REST API
Sign in with Apple
Sign in with Apple JS
Hello Apple Team
We are integrating App Attest with our backend and seeing a 400 Bad Request response when calling the attestation endpoint. The issue is that the response does not include an X-Request-ID or JSON error payload with id and code, which makes it hard to diagnose. Instead, it only returns a receipt blob.
Request Details
URL:
https://data-development.appattest.apple.com/v1/attestationData
Request Headers:
Authorization: eyJraWQiOiI0RjVLSzRGV1JaIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiOiJOOVNVR1pNNjdRIiwiZXhwIjoxNzU3MDUxNTYwLCJpYXQiOjE3NTcwNDc5NjB9.MEQCIF236MqPCl6Vexg7RcPUMK8XQeACXogldnpuiNnGQnzgAiBQqASdbJ64g58xfWGpbzY3iohvxBSO5U5ZE3l87JjfmQ
Content-Type: application/octet-stream
Request Body:
(Binary data, logged as [B@59fd7d35)
Response
Status:
400 Bad Request
Response Headers:
Date: Fri, 05 Sep 2025 04:52:40 GMT
x-b3-traceid: 4c42e18094022424
x-b3-spanid: 4c42e18094022424
Response Body (truncated):
"receipt": h'308006092A864886F70D01070...
Problem
The response does not include X-Request-ID.
The response does not include JSON with id or code.
Only a receipt blob is returned.
Questions
Can the x-b3-traceid be used by Apple to trace this failed request internally?
Is it expected for some failures to return only a receipt blob without X-Request-ID?
How should we interpret this error so we can handle it properly in production?
Thanks in advance for your guidance.
Hi,
Before I begin my investigation, I want to explain our code-level support process for issues related to Sign in with Apple—as the issue you’re reporting may be the result of any of the following:
An error in your app or web service request.
A configuration issue in your Developer Account.
An internal issue in the operation system or Apple ID servers.
To ensure the issue is not caused by an error within your app or web service request, please review TN3107: Resolving Sign in with Apple response errors to learn more about common error causes and potential solutions when performing requests.
If the technote does not help identify the cause of the error, I need more information about your app or web services to get started. To prevent sending sensitive JSON Web Tokens (JWTs) in plain text, you should create a report in Feedback Assistant to share the details requested below. Additionally, if I determine the error is caused by an internal issue in the operating system or Apple ID servers, the appropriate engineering teams have access to the same information and can communicate with you directly for more information, if needed. Please follow the instructions below to submit your feedback.
Gathering required information for troubleshooting Sign in with Apple authorization and token requests
For issues occurring with your native app, perform the following steps:
Install the Accounts/AuthKit profile on your iOS, macOS, tvOS, watchOS, or visionOS device.
Reproduce the issue and make a note of the timestamp when the issue occurred, while optionally capturing screenshots or video.
Gather a sysdiagnose on the same iOS, macOS, tvOS, watchOS, or visionOS device.
Create a report in Feedback Assistant, and ensure your feedback contains the following information:
the primary App ID or Bundle ID
the user’s Apple ID, email address, and/or identity token
the sysdiagnose gathered after reproducing the issue
the timestamp of when the issue was reproduced
screenshots or videos of errors and unexpected behaviors (optional)
For issues occurring with your web service, ensure your feedback contains the following information:
the primary App ID and Services ID
the user’s Apple ID, email address, and/or identity token
the failing request, including all parameter values, and error responses (if applicable)
the timestamp of when the issue was reproduced (optional)
screenshots or videos of errors and unexpected behaviors (optional)
Important: If providing a web service request, please ensure the client secret (JWT) has an extended expiration time (exp) of at least ten (10) business days, so I have enough time to diagnose the issue. Additionally, if your request requires access token or refresh tokens, please provide refresh tokens as they do not have a time-based expiration time; most access tokens have a maximum lifetime of one (1) hour, and will expire before I have a chance to look at the issue.
Submitting your feedback
Before you submit to Feedback Assistant, please confirm the requested information above (for your native app or web service) is included in your feedback. Failure to provide the requested information will only delay my investigation into the reported issue within your Sign in with Apple client.
After your submission to Feedback Assistant is complete, please respond in your existing Developer Forums post with the Feedback ID. Once received, I can begin my investigation and determine if this issue is caused by an error within your client, a configuration issue within your developer account, or an underlying system bug.
Cheers,
Paris X Pinkney | WWDR | DTS Engineer
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Tags:
Sign in with Apple REST API
Sign in with Apple
Sign in with Apple JS
I am developing a background program that is included in the app as an extension. I would like to include logic to check the teamID and code signature validity of the program I created to ensure that it has not been tampered with. Is this possible?
I must be missing something. How can an iphone that is in lockdown mode, using ONLY data, no Bluetooth connected and only one singular iPhone have seven UNLISTED items on the local network in privacy and settings?
Our application uses Screen capture KIT API for screen recording.
But from Sequoia OS, we are getting additional permission dialog which states " is requesting to bypass the system private window picker and directly access your screen and audio".
It seems we need to add our app under "System settings -> Privacy & Security -> Remote Desktop" setting to avoid getting above additional dialogue in every few days.
Some places mention use of .plist file that if mention in this file, the app will request for this permission. But did not seem to work or we do not understand that properly yet.
Hi,
I am developing a Platform SSO in order to have integrated with our IdP, which I am also adapting to provide the right endpoints for Platform SSO.
I have a few questions about the implementation:
does the client-request-id need to be present on all requests? Is it unique per request, or requests that are bound together like those requesting a nonce and those who will use that nonce should use the same client-request-id?
I am not sure how the loginManager.presentRegistrationViewController works. I'd like to get the user to authenticate to my IdP before device registration. So I am not sure if I should provide my own Webview or something similar or if this method should do something for me;
My idea is to request user authentication once, save the state when performing device registration, so that I avoid asking for user authentication twice when performing user registration. Is this the right way to do it?
How does platform SSO handles tokens? If one application of my IdP requests the authentication on a common OIDC/OAuth2 flow, should I perform some sort of token exchange?
How about SAML? Platform SSO seems to be token-centric, but how does one handle SAML flows? Is it by using WebView as well?
Our business model is to identify Frauds using our advanced AI/ML model. However, in order to do so we need to collect many device information which seems to be ok according to https://developer.apple.com/app-store/user-privacy-and-data-use/
But it's also prohibited to generate a fingerprint, so I need more clarification here.
Does it mean I can only use the data to identify that a user if either fraud or not but I cannot generate a fingerprint to identify the device?
If so, I can see many SKD in the market that generates Fingerprints like https://fingerprint.com/blog/local-device-fingerprint-ios/
and https://shield.com/?
Topic:
Privacy & Security
SubTopic:
General
Tags:
Analytics & Reporting
DeviceCheck
Device Activity
Privacy
Hello everyone,
I'm encountering a persistent 503 Server Temporarily Not Available error when trying to implement "Sign in with Apple" for my web application. I've already performed a full review of my configuration and I'm confident it's set up correctly, which makes this server-side error particularly confusing.
Problem Description:
Our web application uses Firebase Authentication to handle the "Sign in with Apple" flow. When a user clicks the sign-in button, they are correctly redirected to the appleid.apple.com authorization page. However, instead of seeing the login prompt, the page immediately displays a 503 Server Temporarily Not Available error.
This is the redirect URL being generated (with the state parameter truncated for security):
https://appleid.apple.com/auth/authorize?response_type=code&client_id=XXXXXX&redirect_uri=https%3A%2F%2FXXXXXX.firebaseapp.com%2F__%2Fauth%2Fhandler&state=AMbdmDk...&scope=email%20name&response_mode=form_post
Troubleshooting Steps Performed:
Initially, I was receiving an invalid_client error, which prompted me to meticulously verify every part of my setup. I have confirmed the following:
App ID Configuration: The "Sign in with Apple" capability is enabled for our primary App ID.
Services ID Configuration:
We have a Services ID configured specifically for this.
The "Sign in with Apple" feature is enabled on this Services ID.
The domain is registered and verified under "Domains and Subdomains".
Firebase Settings Match Apple Settings:
The Services ID from Apple is used as the Client ID in our Firebase configuration.
The Team ID is correct.
We have generated a private key, and both the Key ID and the .p8 file have been correctly uploaded to Firebase.
The key is not revoked in the Apple Developer portal.
Since the redirect to Apple is happening with the correct client_id and redirect_uri, and the error is a 5xx server error (not a 4xx client error like invalid_client), I believe our configuration is correct and the issue might be on Apple's end. This has been happening consistently for some time.
My Questions:
What could be causing a persistent 503 Server Temporarily Not Available error on the /auth/authorize endpoint when all client-side configurations appear to be correct?
What is the formal process for opening a technical support ticket (TSI) directly with Apple Developer Support for an issue like this?
Thank you for any insights or help you can provide.
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Tags:
Sign in with Apple REST API
Sign in with Apple
Sign in with Apple JS
Current Setup:
Using Secure Enclave with userPresence access control
Foreground keychain accessibility: whenPasscodeSetThisDeviceOnly
Security Requirement:
Our security group wants us to invalidate biometrics and require a username/password if a biometric item is added (potentially by a hostile 3rd party)
Need to upgrade from userPresence to biometricCurrentSet to ensure re-authentication when biometric credentials change.
Issue:
After implementing biometricCurrentSet, authentication cancels after two failed biometric attempts instead of falling back to passcode.
Current Detection Method:
User completes initial biometric authentication
Biometric changes occur (undetectable by app)
App attempts Secure Enclave access
Access denial triggers re-authentication requirement
Cannot revoke refresh token after access is denied
Security Concern:
Current implementation allows new biometric enrollments to access existing authenticated sessions without re-verification.
Question:
What's the recommended approach to:
Implement biometricCurrentSet while maintaining passcode fallback
Properly handle refresh token invalidation when biometric credentials change
Looking for guidance on best practices for implementing these security requirements while maintaining good UX.
Greetings,
We are struggling to implement device binding according to your documentation. We are generation a nonce value in backend like this:
public static String generateNonce(int byteLength) {
byte[] randomBytes = new byte[byteLength];
new SecureRandom().nextBytes(randomBytes);
return Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes);
}
And our mobile client implement the attestation flow like this:
@implementation AppAttestModule
- (NSData *)sha256FromString:(NSString *)input {
const char *str = [input UTF8String];
unsigned char result[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(str, (CC_LONG)strlen(str), result);
return [NSData dataWithBytes:result length:CC_SHA256_DIGEST_LENGTH];
}
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(generateAttestation:(NSString *)nonce
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
if (@available(iOS 14.0, *)) {
DCAppAttestService *service = [DCAppAttestService sharedService];
if (![service isSupported]) {
reject(@"not_supported", @"App Attest is not supported on this device.", nil);
return;
}
NSData *nonceData = [self sha256FromString:nonce];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *savedKeyId = [defaults stringForKey:@"AppAttestKeyId"];
NSString *savedAttestation = [defaults stringForKey:@"AppAttestAttestationData"];
void (^resolveWithValues)(NSString *keyId, NSData *assertion, NSString *attestationB64) = ^(NSString *keyId, NSData *assertion, NSString *attestationB64) {
NSString *assertionB64 = [assertion base64EncodedStringWithOptions:0];
resolve(@{
@"nonce": nonce,
@"signature": assertionB64,
@"deviceType": @"IOS",
@"attestationData": attestationB64 ?: @"",
@"keyId": keyId
});
};
void (^handleAssertion)(NSString *keyId, NSString *attestationB64) = ^(NSString *keyId, NSString *attestationB64) {
[service generateAssertion:keyId clientDataHash:nonceData completionHandler:^(NSData *assertion, NSError *assertError) {
if (!assertion) {
reject(@"assertion_error", @"Failed to generate assertion", assertError);
return;
}
resolveWithValues(keyId, assertion, attestationB64);
}];
};
if (savedKeyId && savedAttestation) {
handleAssertion(savedKeyId, savedAttestation);
} else {
[service generateKeyWithCompletionHandler:^(NSString *keyId, NSError *keyError) {
if (!keyId) {
reject(@"keygen_error", @"Failed to generate key", keyError);
return;
}
[service attestKey:keyId clientDataHash:nonceData completionHandler:^(NSData *attestation, NSError *attestError) {
if (!attestation) {
reject(@"attestation_error", @"Failed to generate attestation", attestError);
return;
}
NSString *attestationB64 = [attestation base64EncodedStringWithOptions:0];
[defaults setObject:keyId forKey:@"AppAttestKeyId"];
[defaults setObject:attestationB64 forKey:@"AppAttestAttestationData"];
[defaults synchronize];
handleAssertion(keyId, attestationB64);
}];
}];
}
} else {
reject(@"ios_version", @"App Attest requires iOS 14+", nil);
}
}
@end
For validation we are extracting the nonce from the certificate like this:
private static byte[] extractNonceFromAttestationCert(X509Certificate certificate) throws IOException {
byte[] extensionValue = certificate.getExtensionValue("1.2.840.113635.100.8.2");
if (Objects.isNull(extensionValue)) {
throw new IllegalArgumentException("Apple App Attest nonce extension not found in certificate.");
}
ASN1Primitive extensionPrimitive = ASN1Primitive.fromByteArray(extensionValue);
ASN1OctetString outerOctet = ASN1OctetString.getInstance(extensionPrimitive);
ASN1Sequence sequence = (ASN1Sequence) ASN1Primitive.fromByteArray(outerOctet.getOctets());
ASN1TaggedObject taggedObject = (ASN1TaggedObject) sequence.getObjectAt(0);
ASN1OctetString nonceOctet = ASN1OctetString.getInstance(taggedObject.getObject());
return nonceOctet.getOctets();
}
And for the verification we are using this method:
private OptionalMethodResult<Void> verifyNonce(X509Certificate certificate, String expectedNonce, byte[] authData) {
byte[] expectedNonceHash;
try {
byte[] nonceBytes = MessageDigest.getInstance("SHA-256").digest(expectedNonce.getBytes());
byte[] combined = ByteBuffer.allocate(authData.length + nonceBytes.length).put(authData).put(nonceBytes).array();
expectedNonceHash = MessageDigest.getInstance("SHA-256").digest(combined);
} catch (NoSuchAlgorithmException e) {
log.error("Error while validations iOS attestation: {}", e.getMessage(), e);
return OptionalMethodResult.ofError(deviceBindError.getChallengeNotMatchedError());
}
byte[] actualNonceFromCert;
try {
actualNonceFromCert = extractNonceFromAttestationCert(certificate);
} catch (Exception e) {
log.error("Error while extracting nonce from certificate: {}", e.getMessage(), e);
return OptionalMethodResult.ofError(deviceBindError.getChallengeNotMatchedError());
}
if (!Arrays.equals(expectedNonceHash, actualNonceFromCert)) {
return OptionalMethodResult.ofError(deviceBindError.getChallengeNotMatchedError());
}
return OptionalMethodResult.empty();
}
But the values did not matched. What are we doing wrong here?
Thanks.
Hey folks,
I'm seeing an issue where my iOS app is getting an "unknown" error when US users try to sign in with Apple.
It works fine for users in other countries like the UK, Singapore, and Taiwan.
Could it be related to my developer account not being based in the US? Or have I missed something in my settings?
Thanks in advance!
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Hi,
I followed step by step documentation to implement SignIn with Apple in iOS/Android application.
I created an AppId com.nhp.queenergy, a related ServiceId com.nhp.queenergy.apple, and a KeyId.
Authorization request is correctly performed by using ServiceId as client_id and my backend redirect_uri
I receive code on my backend
Token request is performed by using ServiceId as client_id, same redirect_uri, the code I have just received and the client_secret as JWT signed with my .p8 certificate with the following decoded structure
Header
{
"kid": ,
"typ": "JWT",
"alg": "ES256"
}
Payload
{
"iss": ,
"sub": "com.nhp.queenergy.apple",
"aud": "https://appleid.apple.com",
"exp": 1756113744,
"iat": 1756111944
}
I always receive "invalid_grant" error without any further error description.
Moreover the error is always the same even though I use any fake string as client secret.
If the code expires, as expected the error changes by adding "The code has expired or has been revoked."
I really don't know how to solve this issue
Best regards
Topic:
Privacy & Security
SubTopic:
Sign in with Apple
Our service has ended and the app has been removed from the App store.
This app supported Sign in with Apple, but even if I try to revoke the account from the iOS settings or account.apple.com on the web, but can't delete it and no error is displayed.
Does anyone know the cause of this problem or have encountered it?
I'm not sure if it's related, but this app was previously transferred from another organization.
We are using SecPKCS12Import C API in our application to import a self seigned public key certificate. We tried to run the application for the first time on Tahoe and it failed with OSStatus -26275 error.
The release notes didn't mention any deprecation or change in the API as per https://developer.apple.com/documentation/macos-release-notes/macos-26-release-notes.
Are we missing anything? There are no other changes done to our application.