コード例 #1
0
 public OPResult Update(OAuth_Client client)
 {
     using (var db = new OAuthDbContext())
     {
         var exists = db.Clients.Any(o => o.ClientId != client.ClientId && (o.ClientIdentifier == client.ClientIdentifier || client.Name == o.Name));
         if (exists)
         {
             return(new OPResult {
                 IsSucceed = false, Message = "已存在相同名称或相同标识的其它商户"
             });
         }
         db.Entry(client).State = EntityState.Modified;
         try
         {
             db.SaveChanges();
         }
         catch (Exception e)
         {
             return(new OPResult {
                 IsSucceed = false, Message = e.Message
             });
         }
     }
     return(new OPResult {
         IsSucceed = true
     });
 }
コード例 #2
0
        public async Task <IActionResult> Callback(string code, string state)
        {
            var jsonWebKeyText  = Encoding.UTF8.GetString(Convert.FromBase64String(_oAuthOptions.JsonWebKey));
            var jsonWebKey      = new Microsoft.IdentityModel.Tokens.JsonWebKey(jsonWebKeyText);
            var clientAssertion = CreateJwtClientAssertion(_oAuthOptions, jsonWebKey);

            var postParams = new Dictionary <string, string> {
                { "grant_type", "authorization_code" },
                { "code", code },
                { "client_assertion", HttpUtility.UrlEncode(clientAssertion) },
                { "client_assertion_type", ClientAssertionType },
                { "redirect_uri", _oAuthOptions.RedirectUri.AbsoluteUri }
            };

            var httpClient   = _httpClientFactory.CreateClient("OAuthClient");
            var httpContent  = new FormUrlEncodedContent(postParams);
            var httpResponse = await httpClient.PostAsync(_oAuthOptions.TokenEndpoint, httpContent);

            if (httpResponse.IsSuccessStatusCode)
            {
                var oAuthResponse = JsonConvert.DeserializeObject <OAuthResponse>(await httpResponse.Content.ReadAsStringAsync());

                var dbValue = _dbContext.OAuthResponses.Find(1);
                if (dbValue != null)
                {
                    _dbContext.Entry(dbValue).State = EntityState.Detached;
                    _dbContext.OAuthResponses.Attach(oAuthResponse);
                    _dbContext.Entry(oAuthResponse).State = EntityState.Modified;
                }
                else
                {
                    _dbContext.OAuthResponses.Add(oAuthResponse);
                }

                _dbContext.SaveChanges();
                return(RedirectToAction("Index", "Api"));
            }

            var errorResponse = JsonConvert.DeserializeObject <ErrorResponse>(await httpResponse.Content.ReadAsStringAsync());

            return(UnprocessableEntity(errorResponse));
        }