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())
{