Skip to content

Implement limited-use App Check tokens. #4876

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

Merged
merged 8 commits into from
Apr 12, 2023
Merged

Conversation

rosalyntan
Copy link
Member

@rosalyntan rosalyntan commented Apr 7, 2023

Add an API for obtaining limited-use App Check tokens as per go/fac-1-use-client-sdk.

@github-actions
Copy link
Contributor

github-actions bot commented Apr 7, 2023

Javadoc Changes:
--- /Users/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/appcheck/FirebaseAppCheck.html	2023-04-12 20:42:29.000000000 +0000
+++ /Users/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/appcheck/FirebaseAppCheck.html	2023-04-12 20:35:16.000000000 +0000
@@ -93,6 +93,13 @@
             </td>
           </tr>
           <tr>
+            <td><code>abstract @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/android/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</a>()</code></div>
+              <p>Requests a Firebase App Check token.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code>abstract void</code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/appcheck/AppCheckProviderFactory.html">AppCheckProviderFactory</a>&nbsp;factory)</code></div>
@@ -184,6 +191,7 @@
         <h3 class="api-name" id="getAppCheckToken(boolean)">getAppCheckToken</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/android/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#getAppCheckToken(boolean)">getAppCheckToken</a>(boolean&nbsp;forceRefresh)</pre>
         <p>Requests a Firebase App Check token. This method should be used ONLY if you need to authorize requests to a non-Firebase backend. Requests to Firebase backends are authorized automatically if configured.</p>
+        <p>If your non-Firebase backend exposes sensitive or expensive endpoints that has low traffic volume, consider protecting it with <a href="https://firebase.google.com/docs/app-check/custom-resource-backend#replay-protection">Replay Protection</a>. In this case, use the #getLimitedUseAppCheckToken() instead to obtain a limited-use token.</p>
       </div>
       <div class="api-item"><a name="getInstance--"></a><a name="getinstance"></a>
         <h3 class="api-name" id="getInstance()">getInstance</h3>
@@ -195,6 +203,12 @@
         <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html">FirebaseAppCheck</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#getInstance(com.google.firebase.FirebaseApp)">getInstance</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/FirebaseApp.html">FirebaseApp</a>&nbsp;firebaseApp)</pre>
         <p>Gets the instance of <code>FirebaseAppCheck</code> associated with the given <code><a href="/docs/reference/android/com/google/firebase/FirebaseApp.html">FirebaseApp</a></code> instance.</p>
       </div>
+      <div class="api-item"><a name="getLimitedUseAppCheckToken--"></a><a name="getlimiteduseappchecktoken"></a>
+        <h3 class="api-name" id="getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/android/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</a>()</pre>
+        <p>Requests a Firebase App Check token. This method should be used ONLY if you need to authorize requests to a non-Firebase backend. </p>
+        <p>Returns limited-use tokens that are intended for use with your non-Firebase backend endpoints that are protected with <a href="https://firebase.google.com/docs/app-check/custom-resource-backend#replay-protection">Replay Protection</a>. This method does not affect the token generation behavior of the #getAppCheckToken() method.</p>
+      </div>
       <div class="api-item"><a name="installAppCheckProviderFactory-com.google.firebase.appcheck.AppCheckProviderFactory-"></a><a name="installappcheckproviderfactory"></a>
         <h3 class="api-name" id="installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;void&nbsp;<a href="/docs/reference/android/com/google/firebase/appcheck/FirebaseAppCheck.html#installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/appcheck/AppCheckProviderFactory.html">AppCheckProviderFactory</a>&nbsp;factory)</pre>
--- /Users/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html	2023-04-12 20:42:29.000000000 +0000
+++ /Users/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html	2023-04-12 20:35:16.000000000 +0000
@@ -93,6 +93,13 @@
             </td>
           </tr>
           <tr>
+            <td><code>abstract <a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>!&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</a>()</code></div>
+              <p>Requests a Firebase App Check token.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code>abstract <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</a>(factory:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/AppCheckProviderFactory.html">AppCheckProviderFactory</a>)</code></div>
@@ -184,6 +191,7 @@
         <h3 class="api-name" id="getAppCheckToken(boolean)">getAppCheckToken</h3>
         <pre class="api-signature no-pretty-print">abstract&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#getAppCheckToken(boolean)">getAppCheckToken</a>(forceRefresh:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a>):&nbsp;<a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>!&gt;</pre>
         <p>Requests a Firebase App Check token. This method should be used ONLY if you need to authorize requests to a non-Firebase backend. Requests to Firebase backends are authorized automatically if configured.</p>
+        <p>If your non-Firebase backend exposes sensitive or expensive endpoints that has low traffic volume, consider protecting it with <a href="https://firebase.google.com/docs/app-check/custom-resource-backend#replay-protection">Replay Protection</a>. In this case, use the #getLimitedUseAppCheckToken() instead to obtain a limited-use token.</p>
       </div>
       <div class="api-item"><a name="getInstance--"></a><a name="getinstance"></a>
         <h3 class="api-name" id="getInstance()">getInstance</h3>
@@ -195,6 +203,12 @@
         <pre class="api-signature no-pretty-print">java-static&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#getInstance(com.google.firebase.FirebaseApp)">getInstance</a>(firebaseApp:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/FirebaseApp.html">FirebaseApp</a>):&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html">FirebaseAppCheck</a></pre>
         <p>Gets the instance of <code>FirebaseAppCheck</code> associated with the given <code><a href="/docs/reference/kotlin/com/google/firebase/FirebaseApp.html">FirebaseApp</a></code> instance.</p>
       </div>
+      <div class="api-item"><a name="getLimitedUseAppCheckToken--"></a><a name="getlimiteduseappchecktoken"></a>
+        <h3 class="api-name" id="getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</h3>
+        <pre class="api-signature no-pretty-print">abstract&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#getLimitedUseAppCheckToken()">getLimitedUseAppCheckToken</a>():&nbsp;<a href="https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.html">Task</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/AppCheckToken.html">AppCheckToken</a>!&gt;</pre>
+        <p>Requests a Firebase App Check token. This method should be used ONLY if you need to authorize requests to a non-Firebase backend. </p>
+        <p>Returns limited-use tokens that are intended for use with your non-Firebase backend endpoints that are protected with <a href="https://firebase.google.com/docs/app-check/custom-resource-backend#replay-protection">Replay Protection</a>. This method does not affect the token generation behavior of the #getAppCheckToken() method.</p>
+      </div>
       <div class="api-item"><a name="installAppCheckProviderFactory-com.google.firebase.appcheck.AppCheckProviderFactory-"></a><a name="installappcheckproviderfactory"></a>
         <h3 class="api-name" id="installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</h3>
         <pre class="api-signature no-pretty-print">abstract&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/FirebaseAppCheck.html#installAppCheckProviderFactory(com.google.firebase.appcheck.AppCheckProviderFactory)">installAppCheckProviderFactory</a>(factory:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/appcheck/AppCheckProviderFactory.html">AppCheckProviderFactory</a>):&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a></pre>

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Apr 7, 2023

Coverage Report 1

Affected Products

  • firebase-appcheck

    Overall coverage changed from 82.08% (7eea13a) to 82.18% (2fc6fa4) by +0.10%.

    FilenameBase (7eea13a)Merge (2fc6fa4)Diff
    DefaultFirebaseAppCheck.java82.73%83.19%+0.46%

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/Da88kd6wKA.html

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject appcheck_firebase-appcheck:
error: Added method com.google.firebase.appcheck.FirebaseAppCheck.getLimitedUseAppCheckToken() [AddedAbstractMethod]

Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

@github-actions
Copy link
Contributor

github-actions bot commented Apr 7, 2023

Unit Test Results

  60 files  +    6    60 suites  +6   1m 52s ⏱️ +53s
128 tests  - 273  128 ✔️  - 271  0 💤  - 2  0 ±0 
256 runs   - 546  256 ✔️  - 542  0 💤  - 4  0 ±0 

Results for commit f88c995. ± Comparison against base commit 7eea13a.

This pull request removes 401 and adds 128 tests. Note that renamed tests count towards both.
com.google.firebase.database.DataSnapshotTest ‑ basicIterationWorks
com.google.firebase.database.DataSnapshotTest ‑ existsWorks
com.google.firebase.database.DatabaseRegistrarTest ‑ getComponents_publishesLibVersionComponent
com.google.firebase.database.MapperTest ‑ XMLAndURLBean
com.google.firebase.database.MapperTest ‑ allowNullEverywhere
com.google.firebase.database.MapperTest ‑ argConstructorCantBeDeserialized
com.google.firebase.database.MapperTest ‑ beanMapsMustHaveStringKeys
com.google.firebase.database.MapperTest ‑ beanMapsMustHaveStringKeysForSerializing
com.google.firebase.database.MapperTest ‑ beansCanContainBeanLists
com.google.firebase.database.MapperTest ‑ beansCanContainBeanMaps
…
com.google.firebase.appcheck.FirebaseAppCheckRegistrarTest ‑ testGetComponents
com.google.firebase.appcheck.FirebaseAppCheckTest ‑ testGetInstance_defaultFirebaseAppName_matchesDefaultGetter
com.google.firebase.appcheck.FirebaseAppCheckTest ‑ testGetInstance_otherFirebaseAppName_doesNotMatch
com.google.firebase.appcheck.debug.DebugAppCheckProviderFactoryTest ‑ testGetInstance_callTwice_sameInstance
com.google.firebase.appcheck.debug.FirebaseAppCheckDebugRegistrarTest ‑ testGetComponents
com.google.firebase.appcheck.debug.internal.DebugAppCheckProviderTest ‑ exchangeDebugToken_onFailure_setsTaskException
com.google.firebase.appcheck.debug.internal.DebugAppCheckProviderTest ‑ exchangeDebugToken_onSuccess_setsTaskResult
com.google.firebase.appcheck.debug.internal.DebugAppCheckProviderTest ‑ testDetermineDebugSecret_noStoredSecret_createsNewSecret
com.google.firebase.appcheck.debug.internal.DebugAppCheckProviderTest ‑ testDetermineDebugSecret_storedSecret_usesExistingSecret
com.google.firebase.appcheck.debug.internal.DebugAppCheckProviderTest ‑ testPublicConstructor_nullFirebaseApp_expectThrows
…

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Apr 7, 2023

Size Report 1

Affected Products

  • firebase-appcheck

    TypeBase (7eea13a)Merge (2fc6fa4)Diff
    aar36.6 kB36.7 kB+80 B (+0.2%)
    apk (release)1.56 MB1.56 MB+12 B (+0.0%)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/BssCN6BABT.html

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Apr 7, 2023

Startup Time Report 1

Note: Layout is sometimes suboptimal due to limited formatting support on GitHub. Please check this report on GCS.

Notes

Startup Times

  • fire-app-check

    DeviceStatisticsDistributions
    oriole-32
    Percentile7eea13a2fc6fa4DiffSignificant (?)
    p101.03 ±1 ms215 ±36 μs-815 μs (-79.1%)NO
    p251.07 ±1 ms248 ±90 μs-826 μs (-76.9%)NO
    p501.14 ±1 ms284 ±90 μs-859 μs (-75.2%)NO
    p751.28 ±1 ms322 ±88 μs-961 μs (-74.9%)NO
    p901.50 ±1 ms396 ±100 μs-1.10 ms (-73.5%)NO

    20 test runs in comparison
    CommitTest Runs
    7eea13a
    • 2023-04-11_20:32:48.897740_oSnl
    • 2023-04-11_20:32:48.899945_cOeC
    • 2023-04-11_20:32:48.899957_kjRg
    • 2023-04-11_20:32:48.899963_kvOS
    • 2023-04-11_20:32:48.899968_ONYG
    • 2023-04-11_20:32:48.899979_rdYC
    • 2023-04-11_20:32:48.899985_ClBd
    • 2023-04-11_20:32:48.899990_UQYc
    • 2023-04-11_20:32:48.899996_qYNW
    • 2023-04-11_20:32:48.900001_xMXn
    2fc6fa4
    • 2023-04-12_20:44:53.476159_egHy
    • 2023-04-12_20:44:53.517566_CxUl
    • 2023-04-12_20:44:53.517943_oGNF
    • 2023-04-12_20:44:53.517964_IFrD
    • 2023-04-12_20:44:53.517973_koha
    • 2023-04-12_20:44:53.517981_StFy
    • 2023-04-12_20:44:53.517988_tiOh
    • 2023-04-12_20:44:53.517994_joqd
    • 2023-04-12_20:44:53.518000_ikug
    • 2023-04-12_20:44:53.518007_uXib
    redfin-30
    Percentile7eea13a2fc6fa4DiffSignificant (?)
    p10998 ±1438 μs864 ±1476 μs-134 μs (-13.5%)NO
    p251.29 ±2 ms924 ±1579 μs-369 μs (-28.5%)NO
    p501.56 ±2 ms1.02 ±2 ms-537 μs (-34.5%)NO
    p751.97 ±3 ms1.20 ±2 ms-776 μs (-39.4%)NO
    p902.48 ±3 ms1.40 ±2 ms-1.09 ms (-43.7%)NO

    20 test runs in comparison
    CommitTest Runs
    7eea13a
    • 2023-04-11_20:32:48.897740_oSnl
    • 2023-04-11_20:32:48.899945_cOeC
    • 2023-04-11_20:32:48.899957_kjRg
    • 2023-04-11_20:32:48.899963_kvOS
    • 2023-04-11_20:32:48.899968_ONYG
    • 2023-04-11_20:32:48.899979_rdYC
    • 2023-04-11_20:32:48.899985_ClBd
    • 2023-04-11_20:32:48.899990_UQYc
    • 2023-04-11_20:32:48.899996_qYNW
    • 2023-04-11_20:32:48.900001_xMXn
    2fc6fa4
    • 2023-04-12_20:44:53.476159_egHy
    • 2023-04-12_20:44:53.517566_CxUl
    • 2023-04-12_20:44:53.517943_oGNF
    • 2023-04-12_20:44:53.517964_IFrD
    • 2023-04-12_20:44:53.517973_koha
    • 2023-04-12_20:44:53.517981_StFy
    • 2023-04-12_20:44:53.517988_tiOh
    • 2023-04-12_20:44:53.517994_joqd
    • 2023-04-12_20:44:53.518000_ikug
    • 2023-04-12_20:44:53.518007_uXib
  • timeToInitialDisplay

    DeviceStatisticsDistributions
    oriole-32
    Percentile7eea13a2fc6fa4DiffSignificant (?)
    p10198 ±9.6 ms198 ±9 ms+201 μs (+0.1%)NO
    p25204 ±11 ms205 ±11 ms+703 μs (+0.3%)NO
    p50214 ±16 ms213 ±11 ms-938 μs (-0.4%)NO
    p75224 ±21 ms222 ±11 ms-1.41 ms (-0.6%)NO
    p90233 ±22 ms234 ±11 ms+1.78 ms (+0.8%)NO

    20 test runs in comparison
    CommitTest Runs
    7eea13a
    • 2023-04-11_20:32:48.897740_oSnl
    • 2023-04-11_20:32:48.899945_cOeC
    • 2023-04-11_20:32:48.899957_kjRg
    • 2023-04-11_20:32:48.899963_kvOS
    • 2023-04-11_20:32:48.899968_ONYG
    • 2023-04-11_20:32:48.899979_rdYC
    • 2023-04-11_20:32:48.899985_ClBd
    • 2023-04-11_20:32:48.899990_UQYc
    • 2023-04-11_20:32:48.899996_qYNW
    • 2023-04-11_20:32:48.900001_xMXn
    2fc6fa4
    • 2023-04-12_20:44:53.476159_egHy
    • 2023-04-12_20:44:53.517566_CxUl
    • 2023-04-12_20:44:53.517943_oGNF
    • 2023-04-12_20:44:53.517964_IFrD
    • 2023-04-12_20:44:53.517973_koha
    • 2023-04-12_20:44:53.517981_StFy
    • 2023-04-12_20:44:53.517988_tiOh
    • 2023-04-12_20:44:53.517994_joqd
    • 2023-04-12_20:44:53.518000_ikug
    • 2023-04-12_20:44:53.518007_uXib
    redfin-30
    Percentile7eea13a2fc6fa4DiffSignificant (?)
    p10231 ±4 ms252 ±6 ms+20.5 ms (+8.9%)MAYBE
    p25237 ±5 ms258 ±7 ms+21.3 ms (+9.0%)MAYBE
    p50244 ±5 ms265 ±6 ms+21.3 ms (+8.7%)MAYBE
    p75253 ±5 ms274 ±7 ms+21.2 ms (+8.4%)MAYBE
    p90261 ±5 ms289 ±8 ms+27.7 ms (+10.6%)MAYBE

    20 test runs in comparison
    CommitTest Runs
    7eea13a
    • 2023-04-11_20:32:48.897740_oSnl
    • 2023-04-11_20:32:48.899945_cOeC
    • 2023-04-11_20:32:48.899957_kjRg
    • 2023-04-11_20:32:48.899963_kvOS
    • 2023-04-11_20:32:48.899968_ONYG
    • 2023-04-11_20:32:48.899979_rdYC
    • 2023-04-11_20:32:48.899985_ClBd
    • 2023-04-11_20:32:48.899990_UQYc
    • 2023-04-11_20:32:48.899996_qYNW
    • 2023-04-11_20:32:48.900001_xMXn
    2fc6fa4
    • 2023-04-12_20:44:53.476159_egHy
    • 2023-04-12_20:44:53.517566_CxUl
    • 2023-04-12_20:44:53.517943_oGNF
    • 2023-04-12_20:44:53.517964_IFrD
    • 2023-04-12_20:44:53.517973_koha
    • 2023-04-12_20:44:53.517981_StFy
    • 2023-04-12_20:44:53.517988_tiOh
    • 2023-04-12_20:44:53.517994_joqd
    • 2023-04-12_20:44:53.518000_ikug
    • 2023-04-12_20:44:53.518007_uXib

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/Vi9rQvjuqE/index.html

@rosalyntan rosalyntan changed the title Implement getLimitedUseAppCheckToken. Implement limited-use App Check tokens. Apr 7, 2023
@rosalyntan rosalyntan marked this pull request as ready for review April 7, 2023 23:40
@rosalyntan rosalyntan requested a review from malcolmdeck April 7, 2023 23:40
@rosalyntan rosalyntan merged commit 5a3de3a into master Apr 12, 2023
@rosalyntan rosalyntan deleted the rosalyntan.fac-limited branch April 12, 2023 21:41
@firebase firebase locked and limited conversation to collaborators May 13, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants