public async Task <UserAuthModel> ExchangeCodeForToken(AuthParameters authParameters) { var identityProvider = await _identityProviderDal.GetIdentityProvider(authParameters.ClientId); var discoveryDocument = await _identityProviderDiscoveryService.GetDiscoveryDocument(identityProvider); var authCode = new AuthCodeModel { Code = authParameters.Code, ClientId = authParameters.ClientId, ClientSecret = identityProvider.ClientSecret, RedirectUri = authParameters.RedirectUri, GrantType = GrantType.AuthorizationCode }; var data = new StringContent(JsonConvert.SerializeObject(authCode), Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(discoveryDocument.TokenEndpoint, data); var content = await response.Content.ReadAsStringAsync(); var authToken = JsonConvert.DeserializeObject <AuthTokenModel>(content); if (authParameters.Nonce != authToken.IdToken.Payload.Nonce) { throw new AuthenticationException($"The provided nonce {authParameters.Nonce} did match the nonce returned from the identity provider."); } return(new UserAuthModel { AccessToken = authToken.AccessToken, DisplayName = authToken.IdToken.GetClaim(JwtSecurityTokenClaimType.Name), ProfilePictureUrl = authToken.IdToken.GetClaim(JwtSecurityTokenClaimType.Picture) }); }
public async Task <IHttpActionResult> PostAccessToken([FromBody] AuthCodeModel codeModel) { Code code = new Code(); try { code = await db.Codes.FirstOrDefaultAsync(x => x.AccessCode == codeModel.Code); } catch { return(Unauthorized()); } if (code == null) { return(Unauthorized()); } if (code.Timeofrelease <= DateTime.Now) { return(Unauthorized()); } Owner owner = new Owner(); try { owner = await db.Owners.FirstOrDefaultAsync(x => x.RedirectURI == codeModel.RedirectURI); } catch { return(Unauthorized()); } Token token = new Token(); try { token = await db.Tokens.FirstOrDefaultAsync(x => x.AccessCodeId == code.Id); } catch { return(Unauthorized()); } if (token == null) { return(Unauthorized()); } TokenMessage msg = new TokenMessage(); msg.AccessToken = token.AccessToken; msg.RefreshToken = token.RefreshToken; msg.TokenType = "Bearer"; return(Ok <TokenMessage>(msg)); }
private IEnumerator _getAuthCode(string scopes, OnAuthCodeCompleted complete = null, OnAuthCodeError error = null) { string _url = _oauth_uri + "get_auth_code?"; // Get Auth Code _url += "scope=" + scopes; // Set Scopes _url += "&client_id=" + application.app_id; // Set Application ID var request = new WWW(_url); // Create WWW Request yield return(request); // Send Request // Work with Response if (request.error != null) // Request has error { throw new Exception("Не удалось отправить запрос к серверу VK API. Проверьте соединение с интернетом и попробуйте снова."); } else // No Errors { if (request.text.Length < 1) // Error { BaseErrorModel _error = new BaseErrorModel(); _error.error_code = 999; _error.error_msg = "Не удалось получить код авторизации VK API. Попробуйте изменить ваш запрос."; error(_error); // Call Error } else // All Right { BaseRequestModel response = JsonUtility.FromJson <BaseRequestModel>(request.text); // Get Base Model from Response Text if (response.error.error_code == -1) // Response not has an errors { AuthCodeModel auth_code = JsonUtility.FromJson <AuthCodeModel>(request.text); // Get Authentication Model from Response if (complete != null) { complete(auth_code); // Return Complete } } else // Reponse has errors { if (error != null) { error(response.error); // Show Error } if (settings.debug_mode) { Debug.Log("VK SDK Error: " + response.error.error_msg); } } } } }
public async Task <ActionResult> GenCodes(string code, string state) { TokenMessage msg = new TokenMessage(); AuthCodeModel codeModel = new AuthCodeModel(); codeModel.Code = code; codeModel.RedirectURI = "http://localhost:53722/"; codeModel.GrantType = "code"; codeModel.ClientId = 1; try { using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage res = await client.PostAsJsonAsync(new Uri("http://localhost:49939/api/Gateway/code"), codeModel); if (res.IsSuccessStatusCode) { var Response = res.Content.ReadAsStringAsync().Result; msg = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenMessage>(Response); HttpContext.Response.Cookies["access_token"].Value = msg.AccessToken; HttpContext.Response.Cookies["refresh_token"].Value = msg.RefreshToken; } else { var Response = res.Content.ReadAsStringAsync().Result; var str = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(Response); return(View("SorryPage", (object)str)); } } } catch { string str = "Now system is unavailable"; return(View("SorryPage", (object)str)); } return(View("Description")); }
public delegate void OnVKAuthError(BaseErrorModel error); // Authentication Error Delegate public void Auth(OnVKAuthComplete complete = null, OnVKAuthError error = null) { // Generate Scopes List <string> _slist = new List <string>(); if (application.friends) { _slist.Add("friends"); } if (application.notify) { _slist.Add("notify"); } if (application.photos) { _slist.Add("photos"); } if (application.audio) { _slist.Add("audio"); } if (application.video) { _slist.Add("video"); } if (application.stories) { _slist.Add("stories"); } if (application.pages) { _slist.Add("pages"); } if (application.status) { _slist.Add("status"); } if (application.notes) { _slist.Add("notes"); } if (application.messages) { _slist.Add("messages"); } if (application.wall) { _slist.Add("wall"); } if (application.ads) { _slist.Add("ads"); } if (application.offline) { _slist.Add("offline"); } if (application.docs) { _slist.Add("docs"); } if (application.groups) { _slist.Add("groups"); } if (application.notifications) { _slist.Add("notifications"); } if (application.stats) { _slist.Add("stats"); } if (application.email) { _slist.Add("email"); } if (application.market) { _slist.Add("market"); } string _scopes = String.Join(",", _slist.ToArray()); // Get Authentication Code StartCoroutine(_getAuthCode(_scopes, (AuthCodeModel auth_code) => { // Authentication Code Successfully received _authCode = auth_code; // Set Auth Code Model _getAccessToken((string at) => { // Token Request Complete complete(at); // Complete }, (BaseErrorModel e) => { // Token Request Error if (error != null) { error(e); } }); }, (BaseErrorModel e) => { // Authentication Code Request Error if (error != null) { error(e); // Return Error } })); }