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

Append v2 to endpoint when using a Microsoft authority under OIDC protocol mode #6256

Merged
merged 21 commits into from
Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8ed0bd0
First commit
shylasummers Jul 21, 2023
14e15b8
Change files
shylasummers Jul 24, 2023
988c75e
Changed "metdata" to "metadata"
shylasummers Jul 25, 2023
005eaee
Remove changes from 988c75e
shylasummers Jul 25, 2023
f60c28e
Merge branch 'dev' into oidc-known-authorities
shylasummers Jul 25, 2023
dbcae8d
Addressed comments
shylasummers Jul 26, 2023
2e37891
Merge branch 'oidc-known-authorities' of https://github.com/AzureAD/m…
shylasummers Jul 26, 2023
3377bf0
Removed unnecessary export
shylasummers Jul 26, 2023
2fe7d3d
Merge branch 'dev' into oidc-known-authorities
shylasummers Jul 27, 2023
3a349a5
Remove changes in favor of adding tests later
shylasummers Jul 31, 2023
394f37a
Merge branch 'dev' into oidc-known-authorities
shylasummers Jul 31, 2023
ed22784
Changed endpoint check from protocol mode to authority
shylasummers Jul 31, 2023
ad7a5e4
Merge branch 'oidc-known-authorities' of https://github.com/AzureAD/m…
shylasummers Jul 31, 2023
d0e84f8
Removed unnecessary export
shylasummers Jul 31, 2023
48794cb
Delete @azure-msal-browser-7241828b-7956-4b89-a345-913b05a23ac5.json
shylasummers Jul 31, 2023
c831fff
Update @azure-msal-common-7e065849-b972-405d-ab85-674138d67aa2.json
shylasummers Jul 31, 2023
ce1bacd
Merge branch 'dev' into oidc-known-authorities
shylasummers Aug 1, 2023
e0c4be7
Merge branch 'dev' into oidc-known-authorities
shylasummers Aug 1, 2023
42c860d
Improved runtime of isAliasOfKnownMicrosoftAuthority
shylasummers Aug 1, 2023
41c0abf
Merge branch 'oidc-known-authorities' of https://github.com/AzureAD/m…
shylasummers Aug 1, 2023
9fd5307
Removed console.log
shylasummers Aug 1, 2023
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Append v2 to endpoint when using a Microsoft authority under OIDC protocol mode",
"packageName": "@azure/msal-common",
"email": "[email protected]",
"dependentChangeType": "patch"
}
12 changes: 11 additions & 1 deletion lib/msal-common/src/authority/Authority.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
import {
EndpointMetadata,
InstanceDiscoveryMetadata,
InstanceDiscoveryMetadataAliases,
} from "./AuthorityMetadata";
import { ClientConfigurationError } from "../error/ClientConfigurationError";
import { ProtocolMode } from "./ProtocolMode";
Expand Down Expand Up @@ -352,9 +353,10 @@ export class Authority {
* The default open id configuration endpoint for any canonical authority.
*/
protected get defaultOpenIdConfigurationEndpoint(): string {
const canonicalAuthorityHost = this.hostnameAndPort;
if (
this.authorityType === AuthorityType.Adfs ||
this.protocolMode === ProtocolMode.OIDC
!this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost)
) {
return `${this.canonicalAuthority}.well-known/openid-configuration`;
}
Expand Down Expand Up @@ -1100,6 +1102,14 @@ export class Authority {
return this.metadata.aliases.indexOf(host) > -1;
}

/**
* Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery
* @param host
*/
isAliasOfKnownMicrosoftAuthority(host: string): boolean {
return InstanceDiscoveryMetadataAliases.has(host);
}

/**
* Checks whether the provided host is that of a public cloud authority
*
Expand Down
9 changes: 9 additions & 0 deletions lib/msal-common/src/authority/AuthorityMetadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -942,3 +942,12 @@ export const rawMetdataJSON = {
export const EndpointMetadata = rawMetdataJSON.endpointMetadata;
export const InstanceDiscoveryMetadata =
rawMetdataJSON.instanceDiscoveryMetadata;

export const InstanceDiscoveryMetadataAliases: Set<String> = new Set();
for (const key in InstanceDiscoveryMetadata) {
for (const metadata of InstanceDiscoveryMetadata[key].metadata) {
for (const alias of metadata.aliases) {
InstanceDiscoveryMetadataAliases.add(alias);
}
}
}
14 changes: 0 additions & 14 deletions lib/msal-common/src/error/ClientConfigurationError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,6 @@ export const ClientConfigurationErrorMessage = {
code: "invalid_authentication_header",
desc: "Invalid authentication header provided",
},
cannotSetOIDCProtocolMode: {
code: "cannot_set_OIDC_protocol_mode",
desc: "Cannot use OIDC Protocol Mode when using a known Microsoft authority.",
},
cannotSetOIDCOptions: {
code: "cannot_set_OIDCOptions",
desc: "Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.",
Expand Down Expand Up @@ -368,16 +364,6 @@ export class ClientConfigurationError extends ClientAuthError {
);
}

/**
* Throws error when using OIDC protocol mode with a known Microsoft authority
*/
static createCannotSetOIDCProtocolModeError(): ClientConfigurationError {
return new ClientConfigurationError(
ClientConfigurationErrorMessage.cannotSetOIDCProtocolMode.code,
ClientConfigurationErrorMessage.cannotSetOIDCProtocolMode.desc
);
}

/**
* Throws error when provided non-default OIDCOptions when not in OIDC protocol mode
*/
Expand Down
35 changes: 33 additions & 2 deletions lib/msal-common/test/authority/Authority.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2569,7 +2569,38 @@ describe("Authority.ts Class Unit Tests", () => {
);
});

it("OIDC ProtocolMode does not append v2 to endpoint", async () => {
it("Does not append v2 to endpoint when not using a known Microsoft authority", async () => {
const authorityUrl = "https://test.com/";
let endpoint = "";
const options = {
protocolMode: ProtocolMode.OIDC,
knownAuthorities: ["https://test.com"],
cloudDiscoveryMetadata: "",
authorityMetadata: "",
};
authority = new Authority(
authorityUrl,
networkInterface,
mockStorage,
options,
logger
);
jest.spyOn(
networkInterface,
<any>"sendGetRequestAsync"
).mockImplementation((openIdConfigEndpoint) => {
// @ts-ignore
endpoint = openIdConfigEndpoint;
return DEFAULT_OPENID_CONFIG_RESPONSE;
});

await authority.resolveEndpointsAsync();
expect(endpoint).toBe(
`${authorityUrl}.well-known/openid-configuration`
);
});

it("Does append v2 to endpoint when using a known Microsoft authority", async () => {
const authorityUrl = "https://login.microsoftonline.com/";
let endpoint = "";
const options = {
Expand All @@ -2596,7 +2627,7 @@ describe("Authority.ts Class Unit Tests", () => {

await authority.resolveEndpointsAsync();
expect(endpoint).toBe(
`${authorityUrl}.well-known/openid-configuration`
`${authorityUrl}v2.0/.well-known/openid-configuration`
);
});
});
Expand Down
Loading