-
Notifications
You must be signed in to change notification settings - Fork 1.7k
App Check: App Attest provider #8133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 22 commits
ff204f3
869f87c
f2b77f0
39ae2d3
ccac49c
c7558b5
e7f1ff8
ed07e4b
67b5c3a
786f613
6742e33
a35d7bd
2b16a5f
c2bb06b
cd53ea8
e04a789
ac17a23
b9d638e
cea2f68
2b70bf0
f134778
2102187
c0650aa
b8f80f3
76486af
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,4 @@ | ||
# 8.1.0 -- M97 | ||
- [added] Apple's App Attest attestation provider support. (#8133) | ||
# v8.0.0 -- M95 | ||
- [added] Firebase abuse reduction support SDK. (#7928, #7937, #7948) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Copyright 2021 Google LLC | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#import <Foundation/Foundation.h> | ||
|
||
@class FBLPromise<Result>; | ||
@class FIRAppAttestAttestationResponse; | ||
@class FIRAppCheckToken; | ||
@protocol FIRAppCheckAPIServiceProtocol; | ||
|
||
NS_ASSUME_NONNULL_BEGIN | ||
|
||
/// Methods to send API requests required for App Attest based attestation sequence. | ||
@protocol FIRAppAttestAPIServiceProtocol <NSObject> | ||
|
||
/// Request a random challenge from server. | ||
- (FBLPromise<NSData *> *)getRandomChallenge; | ||
|
||
/// Sends attestation data to Firebase backend for validation. | ||
/// @param attestation The App Attest key attestation data obtained from the method | ||
/// `-[DCAppAttestService attestKey:clientDataHash:completionHandler:]` using the random challenge | ||
/// received from Firebase backend. | ||
/// @param keyID The key ID used to generate the attestation. | ||
/// @param challenge The challenge used to generate the attestation. | ||
/// @return A promise that is fulfilled with a response object with an encrypted attestation | ||
/// artifact and an Firebase App Check token or rejected with an error. | ||
- (FBLPromise<FIRAppAttestAttestationResponse *> *)attestKeyWithAttestation:(NSData *)attestation | ||
keyID:(NSString *)keyID | ||
challenge:(NSData *)challenge; | ||
|
||
/// Exchanges attestation data (artifact & assertion) and a challenge for a FAC token. | ||
- (FBLPromise<FIRAppCheckToken *> *)getAppCheckTokenWithArtifact:(NSData *)artifact | ||
Comment on lines
+40
to
+45
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Following this conversation we had, I had changed There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is obviously pretty minor, but I had remembered it and wanted to bring up in case you now feel more strongly about one way or another. |
||
challenge:(NSData *)challenge | ||
assertion:(NSData *)assertion; | ||
|
||
@end | ||
|
||
/// A default implementation of `FIRAppAttestAPIServiceProtocol`. | ||
@interface FIRAppAttestAPIService : NSObject <FIRAppAttestAPIServiceProtocol> | ||
|
||
/// Default initializer. | ||
/// @param APIService An instance implementing `FIRAppCheckAPIServiceProtocol` to be used to send | ||
/// network requests to Firebase App Check backend. | ||
/// @param projectID A Firebase project ID for the requests (`FIRApp.options.projectID`). | ||
/// @param appID A Firebase app ID for the requests (`FIRApp.options.googleAppID`). | ||
- (instancetype)initWithAPIService:(id<FIRAppCheckAPIServiceProtocol>)APIService | ||
projectID:(NSString *)projectID | ||
appID:(NSString *)appID; | ||
|
||
@end | ||
|
||
NS_ASSUME_NONNULL_END |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not for this PR, but there should be a build test in CI to keep this unstale.