UNPKG

@azure/msal-common

Version:
151 lines (143 loc) 5.55 kB
/* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { AuthenticationScheme, HttpMethod } from "../utils/Constants.js"; import type { AzureCloudOptions } from "../config/ClientConfiguration.js"; import { StringDict } from "../utils/MsalTypes.js"; import { StoreInCache } from "./StoreInCache.js"; import { ShrOptions } from "../crypto/SignedHttpRequest.js"; import { createClientAuthError } from "../error/ClientAuthError.js"; import * as ClientAuthErrorCodes from "../error/ClientAuthErrorCodes.js"; /** * BaseAuthRequest */ export type BaseAuthRequest = { /** * URL of the authority, the security token service (STS) from which MSAL will acquire tokens. Defaults to https://login.microsoftonline.com/common. If using the same authority for all request, authority should set on client application object and not request, to avoid resolving authority endpoints multiple times. */ authority: string; /** * Unique GUID set per request to trace a request end-to-end for telemetry purposes. */ correlationId: string; /** * Array of scopes the application is requesting access to. */ scopes: Array<string>; /** * The type of token retrieved. Defaults to "Bearer". Can also be type "pop" or "SSH". */ authenticationScheme?: AuthenticationScheme; /** * A stringified claims request which will be added to all /authorize and /token calls */ claims?: string; /** * A stringified claims object which will be added to a Signed HTTP Request */ shrClaims?: string; /** * A server-generated timestamp that has been encrypted and base64URL encoded, which will be added to a Signed HTTP Request. */ shrNonce?: string; /** * An object containing options for the Signed HTTP Request */ shrOptions?: ShrOptions; /** * HTTP Request type used to request data from the resource (i.e. "GET", "POST", etc.). Used for proof-of-possession flows. */ resourceRequestMethod?: string; /** * URI that token will be used for. Used for proof-of-possession flows. */ resourceRequestUri?: string; /** * A stringified JSON Web Key representing a public key that can be signed by an SSH certificate. */ sshJwk?: string; /** * Key ID that uniquely identifies the SSH public key mentioned above. */ sshKid?: string; /** * Convenience string enums for users to provide public/sovereign cloud ids */ azureCloudOptions?: AzureCloudOptions; /** * Maximum allowed age, in milliseconds, of the user's authentication before a new sign-in is required. */ maxAge?: number; /** * Object containing boolean values indicating whether to store tokens in the cache or not (default is true) */ storeInCache?: StoreInCache; /** * Scenario id to track custom user prompts */ scenarioId?: string; /** * Key ID to identify the public key for PoP token request */ popKid?: string; /** * Embedded client id. When specified, broker client id (brk_client_id) and redirect uri (brk_redirect_uri) params are set with values from the config, overriding the corresponding extra parameters, if present. */ embeddedClientId?: string; /** * HTTP method to use for the /authorize request. Defaults to GET, but can be set to POST if the request requires body parameters. */ httpMethod?: HttpMethod; /** * Resource parameter to be sent with the request. Used for MCP flows. */ resource?: string; /** * When true and a brokered flow is in effect—i.e., when a broker client id (brk_client_id), typically derived from embeddedClientId or other broker parameters, is included in the request—clientCapabilities from configuration will be excluded from claims. Has no effect when brk_client_id is not present (non-brokered flows). */ skipBrokerClaims?: boolean; /** * String to string map of custom query parameters added to outgoing token service requests. Unless the parameter is only supported on query strings use extraParameters instead */ extraQueryParameters?: StringDict; /** * String to string map of custom parameters added to outgoing token service requests. */ extraParameters?: StringDict; }; /** * Helper to enforce resource parameter presence in token requests when isMcp is set in the configuration. * If resource parameter is set in both the request and in extraQueryParameters or extraParameters, an error will be thrown. * This is used for MCP flows. * @param isMcp - Flag indicating if application is an MCP app, from configuration * @param request - Auth request */ export function enforceResourceParameter( isMcp: boolean, request: Partial<BaseAuthRequest> ): void { if (!isMcp) { return; } if ( request.resource && (containsResourceParam(request.extraParameters) || containsResourceParam(request.extraQueryParameters)) ) { throw createClientAuthError( ClientAuthErrorCodes.misplacedResourceParam ); } if (!request.resource) { throw createClientAuthError( ClientAuthErrorCodes.resourceParameterRequired ); } } function containsResourceParam(params?: StringDict): boolean { if (!params) { return false; } return Object.prototype.hasOwnProperty.call(params, "resource"); }