Skip to content
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

Use generic names for the header and JS API #494

Merged
merged 2 commits into from
Aug 17, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 26 additions & 15 deletions proposals/idp-sign-in-status-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ settings page allowing the user to disable certain IDPs for use with FedCM.
### Headers

```
IdP-SignIn-Status: action=signin
IdP-SignIn-Status: action=signout-all
SignIn-Status: action=signin; type=idp
SignIn-Status: action=signout-all; type=idp
```

These headers can be sent on the toplevel load as well as subresources such as
Expand All @@ -53,23 +53,31 @@ was the last/only account getting signed out.

### JS API

An IdP can alternatively call the IdP Sign-in Status API via JS calls through
the static functions `IdentityProvider.login()` and
`IdentityProvider.logout()`. These are to be called from the IDP's origin, and
marks the current origin as signed in or signed out.
```idl

dictionary SigninStatusOptions {
boolean idp = false;
};

partial interface Navigator {
Promise<void> recordSignedIn(optional SigninStatusOptions options);
Promise<void> recordSignedOut(optional SigninStatusOptions options);
};
```

An IdP can alternatively call the IdP Sign-in Status API via JS calls through
the static functions `navigator.recordSignedIn({idp: true})` and
`navigator.recordSignedOut({idp: true})`. These are to be called from the IDP's
origin, and marks the current origin as signed in or signed out.
cbiesinger marked this conversation as resolved.
Show resolved Hide resolved

```idl
[Exposed=Window]
interface IdentityProvider {
static void login();
static void logout();

static void close();
}
```


In addition, a `close()` function is provided to signal to the browser that the
In addition, a `IdentityProvider.close()` function is provided to signal to the browser that the
cbiesinger marked this conversation as resolved.
Show resolved Hide resolved
signin flow is finished. The reason for this function in addition to the header
is that even when the user is already logged in, the signin flow may not be
finished yet; for example, an IDP may want to prompt the user to verify their
Expand Down Expand Up @@ -153,15 +161,15 @@ We could instead or in addition have allowed notifying the user agent of
individual accounts being signed in/out, such as:

```
IdP-SignIn-Status: action=signin; count=2
IdP-SignIn-Status: action=signout; new-count=1
SignIn-Status: action=signin; count=2; type=idp
SignIn-Status: action=signout; new-count=1; type=idp
```

Or

```
IdP-SignIn-Status: action=signin; [email protected]
IdP-SignIn-Status: action=signout; [email protected]
SignIn-Status: action=signin; [email protected]; type=idp
SignIn-Status: action=signout; [email protected]; type=idp
```

However, we decided to go with the simpler syntax because we do not currently
Expand All @@ -177,4 +185,7 @@ whether no accounts remain after this signout action.

We are also considering with Safari and Firefox how this API relates to the Login Status API [here](https://github.com/privacycg/is-logged-in/issues/53).

In this proposal, we are using generic header and JS function names so that the same API and
headers can be used also for is-logged-in while recording the optional type (i.e. is this
an IDP or not).
cbiesinger marked this conversation as resolved.
Show resolved Hide resolved

Loading