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 }); }
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)); }