Пример #1
0
        }                                                                        //injected by IOC

        public T Authorize <T>(DataModels.ITokenRequest Request, OAuth2.DataModels.Client Client = null)
            where T : DataModels.Token, new()
        {
            using (IDbConnection db = DBFactory.Open())
            {
                T token = TokenModel.InsertToken <T>(
                    TokenHelper.CreateAccessToken(),
                    DataModels.TokenTypes.bearer,
                    3600,
                    DateTime.UtcNow.GetTotalSeconds(),
                    Client,
                    Client.allowed_scope);

                int res = db.Execute(
                    "INSERT INTO AccessToken (access_token, client_id, expires_in, scope) VALUES (@access_token, @client_id, @expires_in, @scope);",
                    token
                    );

                if (token == null)
                {
                    throw new OAuth2.DataModels.TokenRequestError()
                          {
                              error             = DataModels.ErrorCodes.server_error,
                              error_description = "Unable to store token",
                          };
                }

                return(token);
            }
        }
        public T Exchange <T>(string RefreshToken, string ClientID)
            where T : DataModels.Token, new()
        {
            DataModels.Approval approval = ApprovalModel.GetApprovalByRefreshToken(ClientID, RefreshToken);

            if (RefreshToken != approval.refresh_token)
            {
                throw new DataModels.TokenRequestError(DataModels.ErrorCodes.access_denied, "Invalid refresh token");
            }

            return(TokenModel.InsertToken <T>(
                       Extension.TokenHelper.CreateAccessToken(), DataModels.TokenTypes.bearer, 3600, DateTime.Now.GetTotalSeconds(), ClientID, approval.scope, approval.resource_owner_id, approval.refresh_token));
        }