Microsoft 无需重定向即可登录 url
Microsoft sign in works without redirect url
当我在我的 Blazor 应用程序中使用 Microsoft OAuth 登录时,authenticateResult.Succeeded 为真,即使我没有指定重定向 URI。 Google,如果我不将我的 URI 添加到 OAuth 客户端,它就会失败。
Imo,根据 OAuth2.0 规范,没有该重定向 URI 就无法工作:
The authorization server MUST require public clients and SHOULD
require confidential clients to register their redirection URIs.
我正在使用 Microsoft.AspNetCore.Authentication.MicrosoftAccount 3.0.3 和 .NET Core 3.0
public class ExternalLoginModel : PageModel
{
public IActionResult OnGetAsync(string externalAuthType, string returnUrl)
{
var authenticationProperties = new AuthenticationProperties
{
RedirectUri = Url.Page("./externallogin",
pageHandler: "Callback",
values: new { returnUrl }),
};
return new ChallengeResult(externalAuthType, authenticationProperties);
}
public async Task<IActionResult> OnGetCallbackAsync(
string returnUrl = null, string remoteError = null)
{
var authenticateResult = await HttpContext.AuthenticateAsync("External");
if (!authenticateResult.Succeeded) // Should be false for Microsoft sign in
return BadRequest();
...
return LocalRedirect(returnUrl);
}
}
将以下内容添加到我的 Startup 中:
services.AddAuthentication(o =>
{
o.DefaultSignInScheme = "External";
}).AddCookie("External");
services.AddAuthentication().AddGoogle(google =>
{
google.ClientId = Configuration["Authentication:Google:ClientId"];
google.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
我的应用程序的身份验证设置如下所示(我实际上在设置中使用 localhost:12345,但这不是我的应用程序在 运行 上的设置..):
具有讽刺意味的是,最后一句话可能会解释它,但我什至不知道 MicrosoftAccount 库使用的是哪个流程,我只能在谷歌搜索时获得通用文档。
当使用完全不同的域而不是具有不同端口的本地主机时,它会按预期失败。我想这已经足够了。
此外,我未选中 "ID token" 和 "Treat application as a public client",因此据我所知,应该使用 授权代码流 。
当我在我的 Blazor 应用程序中使用 Microsoft OAuth 登录时,authenticateResult.Succeeded 为真,即使我没有指定重定向 URI。 Google,如果我不将我的 URI 添加到 OAuth 客户端,它就会失败。
Imo,根据 OAuth2.0 规范,没有该重定向 URI 就无法工作:
The authorization server MUST require public clients and SHOULD require confidential clients to register their redirection URIs.
我正在使用 Microsoft.AspNetCore.Authentication.MicrosoftAccount 3.0.3 和 .NET Core 3.0
public class ExternalLoginModel : PageModel { public IActionResult OnGetAsync(string externalAuthType, string returnUrl) { var authenticationProperties = new AuthenticationProperties { RedirectUri = Url.Page("./externallogin", pageHandler: "Callback", values: new { returnUrl }), }; return new ChallengeResult(externalAuthType, authenticationProperties); } public async Task<IActionResult> OnGetCallbackAsync( string returnUrl = null, string remoteError = null) { var authenticateResult = await HttpContext.AuthenticateAsync("External"); if (!authenticateResult.Succeeded) // Should be false for Microsoft sign in return BadRequest(); ... return LocalRedirect(returnUrl); } }
将以下内容添加到我的 Startup 中:
services.AddAuthentication(o =>
{
o.DefaultSignInScheme = "External";
}).AddCookie("External");
services.AddAuthentication().AddGoogle(google =>
{
google.ClientId = Configuration["Authentication:Google:ClientId"];
google.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
我的应用程序的身份验证设置如下所示(我实际上在设置中使用 localhost:12345,但这不是我的应用程序在 运行 上的设置..):
具有讽刺意味的是,最后一句话可能会解释它,但我什至不知道 MicrosoftAccount 库使用的是哪个流程,我只能在谷歌搜索时获得通用文档。
当使用完全不同的域而不是具有不同端口的本地主机时,它会按预期失败。我想这已经足够了。
此外,我未选中 "ID token" 和 "Treat application as a public client",因此据我所知,应该使用 授权代码流 。