コード例 #1
0
        protected async Task <ActionResult <Api.OAuthClientSecretResponse> > Post(Api.OAuthClientSecretRequest party)
        {
            try
            {
                if (!await ModelState.TryValidateObjectAsync(party))
                {
                    return(BadRequest(ModelState));
                }

                var oauthDownParty = await tenantService.GetAsync <TParty>(await DownParty.IdFormat(RouteBinding, party.PartyName));

                var secret = new OAuthClientSecret();
                await secretHashLogic.AddSecretHashAsync(secret, party.Secret);

                if (oauthDownParty.Client.Secrets == null)
                {
                    oauthDownParty.Client.Secrets = new List <OAuthClientSecret>();
                }
                oauthDownParty.Client.Secrets.Add(secret);
                await tenantService.UpdateAsync(oauthDownParty);

                return(Created(mapper.Map <Api.OAuthClientSecretResponse>(secret).Set(s => s.Name = new[] { oauthDownParty.Name, s.Name }.ToDotList())));
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.Conflict)
                {
                    logger.Warning(ex, $"Create secret on client '{typeof(TParty).Name}' by name '{party.PartyName}'.");
                    return(Conflict(typeof(TParty).Name, party.PartyName));
                }
                throw;
            }
        }
コード例 #2
0
        private async Task <(string, OAuthClientSecret)> CreateSecretAsync()
        {
            var oauthClientSecret = new OAuthClientSecret();
            var secret            = RandomGenerator.Generate(32);
            await secretHashLogic.AddSecretHashAsync(oauthClientSecret, secret);

            return(secret, oauthClientSecret);
        }
コード例 #3
0
        protected async Task <ActionResult> Post(Api.OAuthClientSecretRequest secretRequest)
        {
            try
            {
                if (!await ModelState.TryValidateObjectAsync(secretRequest))
                {
                    return(BadRequest(ModelState));
                }
                secretRequest.PartyName = secretRequest.PartyName?.ToLower();

                var oauthDownParty = await tenantRepository.GetAsync <TParty>(await DownParty.IdFormatAsync(RouteBinding, secretRequest.PartyName));

                foreach (var s in secretRequest.Secrets)
                {
                    var secret = new OAuthClientSecret();
                    await secretHashLogic.AddSecretHashAsync(secret, s);

                    if (oauthDownParty.Client.Secrets == null)
                    {
                        oauthDownParty.Client.Secrets = new List <OAuthClientSecret>();
                    }
                    oauthDownParty.Client.Secrets.Add(secret);
                }
                secretRequest.Secrets = oauthDownParty.Client.Secrets.Select(s => s.Id).ToList();
                if (!await ModelState.TryValidateObjectAsync(secretRequest))
                {
                    return(BadRequest(ModelState));
                }
                await tenantRepository.UpdateAsync(oauthDownParty);

                return(Created(new Api.OAuthDownParty {
                    Name = secretRequest.PartyName
                }));
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.Conflict)
                {
                    logger.Warning(ex, $"Conflict, Create secret on client '{typeof(TParty).Name}' by name '{secretRequest.PartyName}'.");
                    return(Conflict(typeof(TParty).Name, secretRequest.PartyName));
                }
                throw;
            }
        }
コード例 #4
0
        public async Task <IHttpActionResult> Login(LoginInfo loginInfo)
        {
            Logger.Info("{0}开始登陆", loginInfo.UserName);
            var result = await IdentityContract.Login(loginInfo, false);

            OperationResult createClientResult       = new OperationResult();
            OperationResult createClientSecretResult = new OperationResult();

            if (result.Successed)
            {
                OAuthClientStore             oAuthClientStore             = ServiceProvider.GetService <OAuthClientStore>();
                OAuthClientRefreshTokenStore oAuthClientRefreshTokenStore = ServiceProvider.GetService <OAuthClientRefreshTokenStore>();
                OAuthClient         oAuthClient = new OAuthClient();
                OAuthClientInputDto clientDto   = new OAuthClientInputDto()
                {
                    Name            = loginInfo.UserName,
                    OAuthClientType = OAuthClientType.Application,
                    Url             = "http://localhost:13800/",
                    LogoUrl         = "http://localhost:13800/",
                    RedirectUrl     = "http://localhost:13800/"
                };
                try
                {
                    createClientResult = await oAuthClientStore.CreateClient(clientDto);
                }
                catch (Exception ex)
                {
                    Logger.Error("CreateClient错误:" + ex.ToString());
                }
                if (createClientResult.Successed)
                {
                    oAuthClient = oAuthClientStore.GetOAuthClient(clientDto);
                    OAuthClientSecretInputDto secretDto = new OAuthClientSecretInputDto()
                    {
                        Type     = "Test Type",
                        Remark   = "Remark",
                        ClientId = oAuthClient.Id,
                    };
                    try
                    {
                        createClientSecretResult = await oAuthClientStore.CreateClientSecret(secretDto);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("CreateClientSecret错误:" + ex.ToString());
                    }

                    if (createClientSecretResult.Successed)
                    {
                        OAuthClientSecret   oAuthClientSecret = ClientSecretRepository.Entities.Where(x => x.Client.Id == oAuthClient.Id).FirstOrDefault();
                        ClientAndSecretData data = new ClientAndSecretData();
                        data.ClientId     = oAuthClient.ClientId;
                        data.ClientSecret = oAuthClientSecret.Value;
                        result.Message    = JsonHelper.ToJson(data);

                        return(Json(new OperationResult(OperationResultType.Success, JsonHelper.ToJson(data), result.Data)));
                    }
                    else
                    {
                        return(Json(new OperationResult(OperationResultType.Error, "创建Client Secret失败!")));
                    }
                }
                else
                {
                    return(Json(new OperationResult(OperationResultType.Error, "创建Client失败!")));
                }
            }
            else
            {
                return(Json(result));
            }
        }