protected IHttpActionResult GetHttpMsgWithRedirect(string url, string errMsg = null) { if (string.IsNullOrEmpty(url)) { return(CreateResponse(MobileConnectStatus.Error(ErrorCodes.InvalidArgument, errMsg, new Exception()))); } var authResponse = Request.CreateResponse(HttpStatusCode.Redirect); authResponse.Headers.Location = new Uri(url); return(new ResponseMessageResult(authResponse)); }
public void ResponseConverterShouldHandleErrorStatus() { var error = "this is the error"; var description = "this is the description"; var status = MobileConnectStatus.Error(error, description, null); var actual = ResponseConverter.Convert(status); Assert.IsNotNull(actual); Assert.AreEqual("failure", actual.Status); Assert.AreEqual("error", actual.Action); Assert.AreEqual(error, actual.Error); Assert.AreEqual(description, actual.Description); }
public async Task <IHttpActionResult> DiscoveryCallback( string state = null, string error = null, string error_description = null, string description = null) { if (!string.IsNullOrEmpty(error)) { return(CreateResponse(MobileConnectStatus.Error(error, error_description != null ? error_description : description, new Exception()))); } var options = new MobileConnectRequestOptions { AcceptedValidationResults = Authentication.TokenValidationResult.Valid | Authentication.TokenValidationResult.IdTokenValidationSkipped, Context = ApiVersion.Equals(Utils.Constants.VERSION2_0) || ApiVersion.Equals(Utils.Constants.VERSION2_3) ? Utils.Constants.ContextBindingMsg : null, BindingMessage = ApiVersion.Equals(Utils.Constants.VERSION2_0) || ApiVersion.Equals(Utils.Constants.VERSION2_3) ? Utils.Constants.ContextBindingMsg : null, ClientName = OperatorParams.clientName, AcrValues = OperatorParams.acrValues }; Uri requestUri = Request.RequestUri; SessionData sessionData = SessionCache.Get(state); MobileConnectStatus status = await MobileConnect.HandleUrlRedirectAsync(Request, requestUri, sessionData.DiscoveryResponse, state, sessionData.Nonce, options, ApiVersion); var idTokenResponseModel = JsonConvert.DeserializeObject <IdTokenResponse>(status.TokenResponse.DecodedIdTokenPayload); MobileConnectStatus response = null; if (idTokenResponseModel.nonce.Equals(sessionData.Nonce)) { if (ApiVersion.Equals(Utils.Constants.VERSION1_1) & !string.IsNullOrEmpty(sessionData.DiscoveryResponse.OperatorUrls.UserInfoUrl)) { for (int scopeIndex = 0; scopeIndex < UserInfoScopes.Length; scopeIndex++) { if (OperatorParams.scope.Contains(UserInfoScopes[scopeIndex])) { response = await RequestUserInfo(sessionData.DiscoveryResponse, status.TokenResponse.ResponseData.AccessToken); return(CreateIdentityResponse(status, response)); } } } if ((ApiVersion.Equals(Utils.Constants.VERSION2_0) || ApiVersion.Equals(Utils.Constants.VERSION2_3)) & !string.IsNullOrEmpty(sessionData.DiscoveryResponse.OperatorUrls.PremiumInfoUrl)) { for (int scopeIndex = 0; scopeIndex < IdentityScopes.Length; scopeIndex++) { if (OperatorParams.scope.Contains(IdentityScopes[scopeIndex])) { response = await RequestPremiumInfo(sessionData.DiscoveryResponse, status.TokenResponse.ResponseData.AccessToken); return(CreateIdentityResponse(status, response)); } } } } else { response = MobileConnectStatus.Error( ErrorCodes.InvalidArgument, "nonce is incorrect", new Exception()); return(CreateResponse(response)); } // return CreateResponse(status); return(CreateIdentityResponse(status)); }