I have a user (myself, during development) who originally signed in with Apple successfully. I attempted to revoke
access via Settings > Apple ID > Sign-In & Security > Sign in with Apple, but the app appears stuck in the list and
cannot be fully removed. Now when attempting to sign in again, the identity token contains the correct sub but email is
undefined. According to Apple's documentation, "Apple provides the user's email address in the identity token on all
subsequent API responses." I've tried programmatically revoking via the /auth/revoke endpoint (received 200 OK), and
I've implemented the server-to-server notification endpoint to handle consent-revoked events, but subsequent sign-in
attempts still return no email. The same Apple ID works fine with other apps. Is there a way to fully reset the
credential state for a specific app, or is this a known issue with partially-revoked authorizations?
Sign in with Apple
RSS for tagDiscuss how to provide users the ability to sign in to your apps and websites using their Apple ID.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello,
I am currently process of migrating an app from Team A to Team B and attempting to generate transfer identifiers using the migration endpoint:
POST https://appleid.apple.com/auth/usermigrationinfo.
Content-Type: application/x-www-form-urlencoded
However, I am consistently receiving an
{
"error": "access_denied"
} response.
[Current Configuration]
Team A (Source):
Primary App ID: com.example.primary
Grouped App IDs:
com.example.service (Services ID for Web)
com.example.app (App ID for iOS - The one being transferred)
All identifiers are under the same App Group.
Team B (Destination):
New App ID and Key created.
[Steps Taken]
Created a Client Secret (JWT) using Team A's Key ID and Team ID.
The sub (subject) in the JWT is set to the Primary App ID of Team A.
Requesting with client_id (Primary App ID), client_secret (JWT), and user_token.
[Questions]
1. App Group Impact: Does the fact that the App being transferred is a Grouped App ID (not the Primary) affect the usermigrationinfo request? Should I use the Primary App ID or the specific Grouped App ID as the client_id?
2. Ungrouping Safety: If I need to ungroup the App ID from the Primary App ID to resolve this:
Will existing users still be able to sign in without issues?
Is there any risk of changing the sub (user identifier) that the app receives from Apple?
Will this cause any immediate service interruption for the live app?
Any insights on why access_denied occurs in this Primary-Grouped configuration would be greatly appreciated.
I'm testing app transferring, before, I have migrate user from teamA to teamB, including subA->transferSub->subB process, now I'm transfer the app from teamB to teamC, after the transfer requested, I can't get transfer_id by /usermigrationinfo api, which response 400 invalid request.
the question is I can still get transfer sub by the auth/token api(grant_type: authorization_code) with teamB parameters(teamIdB/clientIdB/appSecretB/redirectUrlB/subB),but the value is same as first time transfer_id which get during teamA to teamB.
when use parameters above with target(teamIdC) to request /usermigrationinfo, invalid request was responsed.
im sure that all parameters is correct, dose it cause by teamB still in 60-days first transferring(sure already accepted)?
hello, I'm writing to seek clarification on Apple account security, particularly regarding potential risks of compromise, implemented safeguards, and residual risks with corresponding mitigation strategies. We would appreciate your insights on the following specific points:
iCloud Keychain Access: Is an Apple ID login strictly required to access iCloud Keychain? We understand that a compromise of iCloud Keychain is unlikely unless a malicious actor successfully takes over the legitimate user's Apple ID. Is this understanding correct?
Passkey Theft Methods and Protections: What are the conceivable methods a malicious actor might employ to steal a legitimate user's passkey, and how are these attempts protected against?
Impact of Apple ID Compromise on Passkeys: If a malicious actor successfully compromises a legitimate user's Apple ID, is it accurate to assume that the legitimate user's passkeys would then synchronize to the attacker's device, potentially allowing them to log in using their own biometrics?
Authorization Flow on Legitimate User's Device: Could you please detail the authorization flow that occurs on the legitimate user's device? We are particularly interested in the types of authentication involved and the conditions under which they are triggered.
Detection and Additional Authentication for Unauthorized Login: How are attempts to log in to an Apple ID from an unrecognized device or browser detected, and what additional authentication steps are implemented in such scenarios?
Thank you for your time and assistance in addressing these important security questions.
PLATFORM AND VERSION
iOS
Development environment: Xcode 26.2, macOS x
Run-time configuration: iOS The issue does not seem to be limited to a specific version.
DESCRIPTION OF PROBLEM
We are reaching out to request in-depth technical assistance regarding an intermittent issue with Sign in with Apple implementation in our application.
[Technical Status]
We have confirmed that our technical implementation is correct. All necessary code and Xcode Capabilities are properly configured, and the service is working perfectly for the vast majority of our users. However, a small subset of users is consistently encountering "Unknown" Error (Error Code 1000), which prevents them from logging in entirely.
[Identified Scenario]
Currently, the only reproducible case we have found involves Child Accounts (protected accounts) under Family Sharing, specifically when the user's age is set below the regional requirement for a standalone Apple ID. However, we are receiving reports from other users who do not seem to fall into this category.
[Requests for Clarification]
To resolve this issue and support our users, we would like to obtain clear answers to the following questions:
Root Cause: Why does Error 1000 occur specifically for a small number of users while the service works for most others?
Other Scenarios: Are there any known cases or conditions other than the "Child Account" age restriction that trigger this specific error?
Account-side Issues: If our code and configurations are verified to be correct, should we conclude that this is an issue specific to the individual's Apple ID/Account status?
If so, could you provide a troubleshooting guide or official recommendation that we can share with these users to help them resolve their account-related issues?
We are committed to providing a seamless authentication experience and would appreciate your expert insight into these edge cases.
Thank you for your support.
- (void) quickLogin:(uint)requestId withNonce:(NSString *)nonce andState:(NSString *)state
{
#if AUTHENTICATION_SERVICES_AVAILABLE
if (@available(iOS 13.0, tvOS 13.0, macOS 10.15, *))
{
ASAuthorizationAppleIDRequest *appleIDRequest = [[self appleIdProvider] createRequest];
[appleIDRequest setNonce:nonce];
[appleIDRequest setState:state];
ASAuthorizationPasswordRequest *keychainRequest = [[self passwordProvider] createRequest];
ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[appleIDRequest, keychainRequest]];
[self performAuthorizationRequestsForController:authorizationController withRequestId:requestId];
}
else
{
[self sendsLoginResponseInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
}
#else
[self sendsLoginResponseInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
#endif
}
- (void) loginWithAppleId:(uint)requestId withOptions:(AppleAuthManagerLoginOptions)options nonce:(NSString *)nonce andState:(NSString *)state
{
#if AUTHENTICATION_SERVICES_AVAILABLE
if (@available(iOS 13.0, tvOS 13.0, macOS 10.15, *))
{
ASAuthorizationAppleIDRequest *request = [[self appleIdProvider] createRequest];
NSMutableArray *scopes = [NSMutableArray array];
if (options & AppleAuthManagerIncludeName)
[scopes addObject:ASAuthorizationScopeFullName];
if (options & AppleAuthManagerIncludeEmail)
[scopes addObject:ASAuthorizationScopeEmail];
[request setRequestedScopes:[scopes copy]];
[request setNonce:nonce];
[request setState:state];
ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
[self performAuthorizationRequestsForController:authorizationController withRequestId:requestId];
}
else
{
[self sendsLoginResponseInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
}
#else
[self sendsLoginResponseInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
#endif
}
- (void) getCredentialStateForUser:(NSString *)userId withRequestId:(uint)requestId
{
#if AUTHENTICATION_SERVICES_AVAILABLE
if (@available(iOS 13.0, tvOS 13.0, macOS 10.15, *))
{
[[self appleIdProvider] getCredentialStateForUserID:userId completion:^(ASAuthorizationAppleIDProviderCredentialState credentialState, NSError * _Nullable error) {
NSNumber *credentialStateNumber = nil;
NSDictionary *errorDictionary = nil;
if (error)
errorDictionary = [AppleAuthSerializer dictionaryForNSError:error];
else
credentialStateNumber = @(credentialState);
NSDictionary *responseDictionary = [AppleAuthSerializer credentialResponseDictionaryForCredentialState:credentialStateNumber
errorDictionary:errorDictionary];
[self sendNativeMessageForDictionary:responseDictionary forRequestId:requestId];
}];
}
else
{
[self sendsCredentialStatusInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
}
#else
[self sendsCredentialStatusInternalErrorWithCode:-100
andMessage:@"Native AppleAuth is only available from iOS 13.0"
forRequestWithId:requestId];
#endif
}