diff --git a/src/Contracts/Masa.Auth.Contracts.Admin/Masa.Auth.Contracts.Admin.csproj b/src/Contracts/Masa.Auth.Contracts.Admin/Masa.Auth.Contracts.Admin.csproj index 98a488eb1..84202157e 100644 --- a/src/Contracts/Masa.Auth.Contracts.Admin/Masa.Auth.Contracts.Admin.csproj +++ b/src/Contracts/Masa.Auth.Contracts.Admin/Masa.Auth.Contracts.Admin.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Web/Masa.Auth.Security.OAuth.Providers/Masa.Auth.Security.OAuth.Providers.csproj b/src/Web/Masa.Auth.Security.OAuth.Providers/Masa.Auth.Security.OAuth.Providers.csproj index 82841f0cf..b53e94ef5 100644 --- a/src/Web/Masa.Auth.Security.OAuth.Providers/Masa.Auth.Security.OAuth.Providers.csproj +++ b/src/Web/Masa.Auth.Security.OAuth.Providers/Masa.Auth.Security.OAuth.Providers.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/ImpersonationGrantValidator.cs b/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/ImpersonationGrantValidator.cs index d84b0e911..0d0a37740 100644 --- a/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/ImpersonationGrantValidator.cs +++ b/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/ImpersonationGrantValidator.cs @@ -6,7 +6,7 @@ namespace Masa.Auth.Web.Sso.Infrastructure.Validations; public class ImpersonationGrantValidator : IExtensionGrantValidator { IAuthClient _authClient; - public string GrantType { get; } = "impersonation"; + public string GrantType { get; } = BuildingBlocks.Authentication.OpenIdConnect.Models.Constans.GrantType.IMPERSONATION; const string IMPERSONATOR_USER_ID = "http://Lonsid.org/identity/claims/impersonatorUserId"; diff --git a/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneCodeGrantValidator.cs b/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneCodeGrantValidator.cs new file mode 100644 index 000000000..43397f9bb --- /dev/null +++ b/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneCodeGrantValidator.cs @@ -0,0 +1,56 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the Apache License. See LICENSE.txt in the project root for license information. + +namespace Masa.Auth.Web.Sso.Infrastructure.Validations; + +public class PssoPhoneCodeGrantValidator : IExtensionGrantValidator +{ + IAuthClient _authClient; + + public string GrantType { get; } = BuildingBlocks.Authentication.OpenIdConnect.Models.Constans.GrantType.PSSO_PHONE_CODE; + + public PssoPhoneCodeGrantValidator(IAuthClient authClient) + { + _authClient = authClient; + } + + public async Task ValidateAsync(ExtensionGrantValidationContext context) + { + var phoneNumber = context.Request.Raw["PhoneNumber"]; + var code = context.Request.Raw["Code"]; + if (string.IsNullOrEmpty(phoneNumber) || string.IsNullOrEmpty(code)) + throw new UserFriendlyException("must provider phone number and msg code"); + + var user = await _authClient.UserService.LoginByPhoneNumberAsync(new LoginByPhoneNumberModel + { + PhoneNumber = phoneNumber, + Code = code + }); + if (user != null) + { + var authUser = await _authClient.UserService.GetThirdPartyUserByUserIdAsync(new GetThirdPartyUserByUserIdModel + { + Scheme = "Psso", + UserId = user.Id + }); + + var claims = new List(); + if (authUser != null) + { + foreach (var item in authUser.ClaimData) + { + claims.Add(new Claim(item.Key, item.Value)); + } + } + + context.Result = new GrantValidationResult(user.Id.ToString(), "sms", claims); + } + else + { + context.Result = new GrantValidationResult( + TokenRequestErrors.InvalidGrant, + "invalid custom credential"); + } + + } +} \ No newline at end of file diff --git a/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneNumberGrantValidator.cs b/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneNumberGrantValidator.cs deleted file mode 100644 index caa4a8e55..000000000 --- a/src/Web/Masa.Auth.Web.Sso/Infrastructure/Validations/PssoPhoneNumberGrantValidator.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) MASA Stack All rights reserved. -// Licensed under the Apache License. See LICENSE.txt in the project root for license information. - -namespace Masa.Auth.Web.Sso.Infrastructure.Validations; - -public class PssoPhoneNumberGrantValidator : IExtensionGrantValidator -{ - IAuthClient _authClient; - LocalLoginByPhoneNumberAgent _localLoginByPhoneNumber; - - public string GrantType { get; } = "psso_phone"; - - public PssoPhoneNumberGrantValidator(IAuthClient authClient, LocalLoginByPhoneNumberAgent localLoginByPhoneNumber) - { - _authClient = authClient; - _localLoginByPhoneNumber = localLoginByPhoneNumber; - } - - public async Task ValidateAsync(ExtensionGrantValidationContext context) - { - var phoneNumber = context.Request.Raw["PhoneNumber"]; - var spToken = context.Request.Raw["SpToken"]; - if (string.IsNullOrEmpty(phoneNumber) || string.IsNullOrEmpty(spToken)) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = "Must provide phone number and spToken", - ErrorDescription = "Must provide phone number and spToken" - }; - return; - } - - var (success, errorMsg) = await _localLoginByPhoneNumber.VerifyPhoneWithTokenAsync(phoneNumber, spToken); - if (success) - { - var user = await _authClient.UserService.GetByPhoneNumberAsync(phoneNumber); - if (user is null) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = $"User {phoneNumber} does not exist", - ErrorDescription = errorMsg - }; - } - else - { - var authUser = await _authClient.UserService.GetThirdPartyUserByUserIdAsync(new GetThirdPartyUserByUserIdModel - { - Scheme = "Psso", - UserId = user.Id - }); - - var claims = new List(); - if (authUser != null) - { - foreach (var item in authUser.ClaimData) - { - claims.Add(new Claim(item.Key, item.Value)); - } - } - - context.Result = new GrantValidationResult(user.Id.ToString(), "local", claims); - } - } - else - context.Result = new GrantValidationResult - { - IsError = true, - Error = errorMsg, - ErrorDescription = errorMsg - }; - } -} diff --git a/src/Web/Masa.Auth.Web.Sso/Program.cs b/src/Web/Masa.Auth.Web.Sso/Program.cs index 002538a0c..be62d2292 100644 --- a/src/Web/Masa.Auth.Web.Sso/Program.cs +++ b/src/Web/Masa.Auth.Web.Sso/Program.cs @@ -70,7 +70,9 @@ .AddExtensionGrantValidator() .AddExtensionGrantValidator() .AddExtensionGrantValidator() - .AddExtensionGrantValidator(); + .AddExtensionGrantValidator() + .AddExtensionGrantValidator() + .AddExtensionGrantValidator(); if (builder.Environment.IsDevelopment()) {