use of com.microsoft.identity.common.internal.providers.oauth2.AuthorizationRequest in project microsoft-authentication-library-common-for-android by AzureAD.
the class TokenCacheItemMigrationAdapter method tryFociTokenWithGivenClientId.
/**
* Testing whether the given client ID can use the cached foci to refresh token.
*
* @param clientId String of the given client id.
* @param redirectUri redirect url string of the given client id.
* @param accountRecord account record of request
* @param refreshTokenRecord refresh token record of FOCI account
* @return true if the given client id can use the cached foci token. False, otherwise.
* @throws ClientException
* @throws IOException
*/
public static boolean tryFociTokenWithGivenClientId(@SuppressWarnings(WarningType.rawtype_warning) @NonNull final OAuth2TokenCache brokerOAuth2TokenCache, @NonNull final String clientId, @NonNull final String redirectUri, @NonNull final RefreshTokenRecord refreshTokenRecord, @NonNull final IAccountRecord accountRecord) throws ClientException, IOException {
final String methodName = ":tryFociTokenWithGivenClientId";
final MicrosoftStsOAuth2Configuration config = new MicrosoftStsOAuth2Configuration();
// Get authority url
final Uri.Builder requestUrlBuilder = new Uri.Builder();
requestUrlBuilder.scheme("https").authority(refreshTokenRecord.getEnvironment()).appendPath(StringUtil.isEmpty(accountRecord.getRealm()) ? ALL_ACCOUNTS_TENANT_ID : accountRecord.getRealm());
final URL authorityUrl = new URL(requestUrlBuilder.build().toString());
// set the token endpoint for the configuration
config.setAuthorityUrl(authorityUrl);
// Create the strategy
final OAuth2StrategyParameters strategyParameters = new OAuth2StrategyParameters();
final MicrosoftStsOAuth2Strategy strategy = new MicrosoftStsOAuth2Strategy(config, strategyParameters);
final String refreshToken = refreshTokenRecord.getSecret();
final String scopes;
// https://identitydivision.visualstudio.com/Engineering/_workitems/edit/1222002
if (TextUtils.equals(clientId, "87749df4-7ccf-48f8-aa87-704bad0e0e16")) {
scopes = "https://devicemgmt.teams.microsoft.com/.default " + BaseController.getDelimitedDefaultScopeString();
Logger.info(TAG + methodName, "Teams agent client ID - making a test request with teams agent resource.");
} else {
scopes = BaseController.getDelimitedDefaultScopeString();
}
// Create a correlation_id for the request
final UUID correlationId = UUID.randomUUID();
Logger.verbose(TAG + methodName, "Create the token request with correlationId [" + correlationId + "]");
final MicrosoftStsTokenRequest tokenRequest = createTokenRequest(clientId, scopes, refreshToken, redirectUri, strategy, correlationId, "2");
Logger.verbose(TAG + methodName, "Start refreshing token (to verify foci) with correlationId [" + correlationId + "]");
final TokenResult tokenResult = strategy.requestToken(tokenRequest);
Logger.verbose(TAG + methodName, "Is the client ID able to use the foci? [" + tokenResult.getSuccess() + "] with correlationId [" + correlationId + "]");
if (tokenResult.getSuccess()) {
// Save the token record in tha cache so that we have an entry in BrokerApplicationMetadata for this client id.
final MicrosoftStsAuthorizationRequest authorizationRequest = createAuthRequest(strategy, clientId, redirectUri, scopes, accountRecord, correlationId);
Logger.verbose(TAG + methodName, "Saving records to cache with client id" + clientId);
brokerOAuth2TokenCacheSave(brokerOAuth2TokenCache, strategy, tokenResult, authorizationRequest);
}
return tokenResult.getSuccess();
}
use of com.microsoft.identity.common.internal.providers.oauth2.AuthorizationRequest in project microsoft-authentication-library-common-for-android by AzureAD.
the class LocalMSALController method acquireDeviceCodeFlowToken.
@Override
public AcquireTokenResult acquireDeviceCodeFlowToken(@SuppressWarnings(WarningType.rawtype_warning) final AuthorizationResult authorizationResult, final DeviceCodeFlowCommandParameters parameters) throws ServiceException, ClientException, IOException {
// Logging start of method
final String methodName = ":acquireDeviceCodeFlowToken";
Logger.verbose(TAG + methodName, "Device Code Flow: Polling for token...");
// Start telemetry with LOCAL_DEVICE_CODE_FLOW_POLLING
Telemetry.emit(new ApiStartEvent().putApiId(TelemetryEventStrings.Api.LOCAL_DEVICE_CODE_FLOW_POLLING));
// Create empty AcquireTokenResult object
final AcquireTokenResult acquireTokenResult = new AcquireTokenResult();
// Assign authorization result
acquireTokenResult.setAuthorizationResult(authorizationResult);
// Fetch the Authorization Response
final MicrosoftStsAuthorizationResponse authorizationResponse = (MicrosoftStsAuthorizationResponse) authorizationResult.getAuthorizationResponse();
// DCF protocol step 2: Poll for token
TokenResult tokenResult = null;
try {
// Create OAuth2Strategy using commandParameters and strategyParameters
final OAuth2StrategyParameters strategyParameters = new OAuth2StrategyParameters();
strategyParameters.setContext(parameters.getAndroidApplicationContext());
@SuppressWarnings(WarningType.rawtype_warning) final OAuth2Strategy oAuth2Strategy = parameters.getAuthority().createOAuth2Strategy(strategyParameters);
// Create token request outside of loop so it isn't re-created after every loop
// Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and MicrosoftStsAuthorizationResponse to GenericAuthorizationResponse in the arguments of call to createTokenRequest method
@SuppressWarnings(WarningType.unchecked_warning) final MicrosoftStsTokenRequest tokenRequest = (MicrosoftStsTokenRequest) oAuth2Strategy.createTokenRequest(mAuthorizationRequest, authorizationResponse, parameters.getAuthenticationScheme());
// Fetch wait interval
final int intervalInMilliseconds = Integer.parseInt(authorizationResponse.getInterval()) * 1000;
String errorCode = ErrorStrings.DEVICE_CODE_FLOW_AUTHORIZATION_PENDING_ERROR_CODE;
// Loop to send multiple requests checking for token
while (authorizationPending(errorCode)) {
// Wait between polls
ThreadUtils.sleepSafely(intervalInMilliseconds, TAG, "Attempting to sleep thread during Device Code Flow token polling...");
// Reset error code
errorCode = "";
// Execute Token Request
// Suppressing unchecked warnings due to casting of MicrosoftStsTokenRequest to GenericTokenRequest in the arguments of call to requestToken method
@SuppressWarnings(WarningType.unchecked_warning) TokenResult tokenResultFromRequestToken = oAuth2Strategy.requestToken(tokenRequest);
tokenResult = tokenResultFromRequestToken;
// Fetch error if the request failed
if (tokenResult.getErrorResponse() != null) {
errorCode = tokenResult.getErrorResponse().getError();
}
}
// Validate request success, may throw MsalServiceException
validateServiceResult(tokenResult);
// Assign token result
acquireTokenResult.setTokenResult(tokenResult);
// If the token is valid, save it into token cache
final List<ICacheRecord> records = saveTokens(oAuth2Strategy, mAuthorizationRequest, acquireTokenResult.getTokenResult().getTokenResponse(), parameters.getOAuth2TokenCache());
// Once the token is stored, fetch and assign the authentication result
final ICacheRecord newestRecord = records.get(0);
acquireTokenResult.setLocalAuthenticationResult(new LocalAuthenticationResult(finalizeCacheRecordForResult(newestRecord, parameters.getAuthenticationScheme()), records, SdkType.MSAL, false));
} catch (Exception error) {
Telemetry.emit(new ApiEndEvent().putException(error).putApiId(TelemetryEventStrings.Api.LOCAL_DEVICE_CODE_FLOW_POLLING));
throw error;
}
logResult(TAG, tokenResult);
// End telemetry with LOCAL_DEVICE_CODE_FLOW_POLLING
Telemetry.emit(new ApiEndEvent().putResult(acquireTokenResult).putApiId(TelemetryEventStrings.Api.LOCAL_DEVICE_CODE_FLOW_POLLING));
return acquireTokenResult;
}
use of com.microsoft.identity.common.internal.providers.oauth2.AuthorizationRequest in project microsoft-authentication-library-common-for-android by AzureAD.
the class BaseController method performTokenRequest.
protected TokenResult performTokenRequest(@SuppressWarnings(WarningType.rawtype_warning) @NonNull final OAuth2Strategy strategy, @SuppressWarnings(WarningType.rawtype_warning) @NonNull final AuthorizationRequest request, @NonNull final AuthorizationResponse response, @NonNull final InteractiveTokenCommandParameters parameters) throws IOException, ClientException {
final String methodName = ":performTokenRequest";
HttpWebRequest.throwIfNetworkNotAvailable(parameters.getAndroidApplicationContext(), parameters.isPowerOptCheckEnabled());
// Suppressing unchecked warnings due to casting of type AuthorizationRequest to GenericAuthorizationRequest and AuthorizationResponse to GenericAuthorizationResponse in arguments of method call to createTokenRequest
@SuppressWarnings(WarningType.unchecked_warning) final TokenRequest tokenRequest = strategy.createTokenRequest(request, response, parameters.getAuthenticationScheme());
if (tokenRequest instanceof MicrosoftTokenRequest) {
((MicrosoftTokenRequest) tokenRequest).setClientAppName(parameters.getApplicationName());
((MicrosoftTokenRequest) tokenRequest).setClientAppVersion(parameters.getApplicationVersion());
}
if (tokenRequest instanceof IHasExtraParameters && parameters instanceof IHasExtraParameters) {
((IHasExtraParameters) tokenRequest).setExtraParameters(((IHasExtraParameters) parameters).getExtraParameters());
}
logExposedFieldsOfObject(TAG + methodName, tokenRequest);
// Suppressing unchecked warnings due to casting of type TokenRequest to GenericTokenRequest in argument of method call to requestToken
@SuppressWarnings(WarningType.unchecked_warning) final TokenResult tokenResult = strategy.requestToken(tokenRequest);
logResult(TAG, tokenResult);
return tokenResult;
}
use of com.microsoft.identity.common.internal.providers.oauth2.AuthorizationRequest in project microsoft-authentication-library-common-for-android by AzureAD.
the class LocalMSALController method performAuthorizationRequest.
// Suppressing rawtype warnings due to the generic types AuthorizationResult and OAuth2Strategy
@SuppressWarnings(WarningType.rawtype_warning)
private AuthorizationResult performAuthorizationRequest(@NonNull final OAuth2Strategy strategy, @NonNull final Context context, @NonNull final InteractiveTokenCommandParameters parameters) throws ExecutionException, InterruptedException, ClientException {
throwIfNetworkNotAvailable(context, parameters.isPowerOptCheckEnabled());
mAuthorizationStrategy = AuthorizationStrategyFactory.getInstance().getAuthorizationStrategy(parameters);
mAuthorizationRequest = getAuthorizationRequest(strategy, parameters);
// Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and AuthorizationStrategy to GenericAuthorizationStrategy in the arguments of call to requestAuthorization method
@SuppressWarnings(WarningType.unchecked_warning) final Future<AuthorizationResult> future = strategy.requestAuthorization(mAuthorizationRequest, mAuthorizationStrategy);
final AuthorizationResult result = future.get();
return result;
}
use of com.microsoft.identity.common.internal.providers.oauth2.AuthorizationRequest in project microsoft-authentication-library-common-for-android by AzureAD.
the class ConfidentialClientHelper method requestAccessTokenForAutomation.
/**
* Yep. Hardcoding this method to retrieve access token for MSIDLABS
*/
private String requestAccessTokenForAutomation() throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, NoSuchProviderException, IOException {
String accessToken = null;
final TokenRequest tokenRequest = this.createTokenRequest();
tokenRequest.setGrantType(CLIENT_CREDENTIALS);
final AccountsInOneOrganization aadAudience = new AccountsInOneOrganization(TENANT_ID);
final AzureActiveDirectoryAuthority authority = new AzureActiveDirectoryAuthority(aadAudience);
try {
final OAuth2StrategyParameters strategyParameters = new OAuth2StrategyParameters();
OAuth2Strategy<AccessToken, BaseAccount, AuthorizationRequest, AuthorizationRequest.Builder, AuthorizationStrategy, OAuth2Configuration, OAuth2StrategyParameters, AuthorizationResponse, RefreshToken, TokenRequest, TokenResponse, TokenResult, AuthorizationResult> strategy = authority.createOAuth2Strategy(strategyParameters);
TokenResult tokenResult = strategy.requestToken(tokenRequest);
if (tokenResult.getSuccess()) {
accessToken = tokenResult.getTokenResponse().getAccessToken();
} else {
throw new RuntimeException(tokenResult.getErrorResponse().getErrorDescription());
}
} catch (final ClientException e) {
e.printStackTrace();
}
return accessToken;
}
Aggregations