Exemple #1
0
        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)
            });
        }
Exemple #2
0
        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
                }
            }));
        }