Pau*_*ode 7 .net azure azure-active-directory razor-pages
我遇到以下问题:
异常:OAuth 令牌端点失败:状态:正文:{“error”:“invalid_client”,“error_description”:“AADSTS700025:客户端是公共的,因此不应显示“client_assertion”和“client_secret”}。
我正在使用 Microsoft.AspNetCore.Authentication.Microsoft 帐户库
Program file
builder.Services.AddAuthentication()
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.LoginPath = "/page";
options.LogoutPath = "/page";
options.AccessDeniedPath = "/page?code={0}";
options.ExpireTimeSpan = TimeSpan.FromMinutes(tiempoDeSesion);
options.Cookie.Name = ".CookieName.Sec";
options.SlidingExpiration = true;
})
.AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = builder.Configuration["AzureAd:ClientId"];
microsoftOptions.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];
microsoftOptions.CallbackPath = new PathString("/signin-microsoft-token");
microsoftOptions.AuthorizationEndpoint = $"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/authorize";
microsoftOptions.TokenEndpoint = $"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/oauth2/v2.0/token";
microsoftOptions.Scope.Add("https://graph.microsoft.com/user.read");
microsoftOptions.SaveTokens = true;
microsoftOptions.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
microsoftOptions.ClaimActions.MapJsonKey(ClaimTypes.Name, "displayName");
microsoftOptions.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenName");
microsoftOptions.ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
microsoftOptions.ClaimActions.MapCustomJson(ClaimTypes.Email,
user => user.GetString("mail") ?? user.GetString("userPrincipalName"));
});Run Code Online (Sandbox Code Playgroud)
Ruk*_*ini 12
如果您使用公共客户端应用程序并传递来生成访问令牌,通常会出现错误“AADSTS700025:客户端是公共的,因此不应显示 'client_assertion' 和 'client_secret'” 。client_secret
您可以验证您的应用程序是否是公共客户端,如下所示:

移动和桌面应用程序是公共客户端。如果您希望 Azure AD 应用程序公开,则可以client_secret通过在代码中排除以下行来避免提供参数:
microsoftOptions.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];
Run Code Online (Sandbox Code Playgroud)
排除 后client_secret,尝试生成访问令牌。
如果您希望您的应用程序保密,请确保更改现有的 Azure AD 应用程序/创建新的 Azure AD 应用程序作为WEB,如下所示:
转到 Azure 门户 -> Azure Active Directory -> 应用程序注册 -> 您的应用程序 -> 身份验证 -> 保存

此配置将使您的 Azure AD 应用程序保密,并且您可以client_secret通过生成访问令牌。
我尝试通过Postman在我的环境中重现相同的内容,并成功获取 Web 应用程序的访问令牌,如下所示:
POST https://login.microsoftonline.com/TenantId/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)

请注意,公共应用程序受到限制,它们不能传递任何秘密。
参考:
公共和机密客户端应用程序 (MSAL) - Microsoft Entra
| 归档时间: |
|
| 查看次数: |
11764 次 |
| 最近记录: |