gpt4 book ai didi

.net - Azure AD Microsoft 帐户客户端是公共(public)的,因此不应显示 'client_assertion' 和 'client_secret'

转载 作者:行者123 更新时间:2023-12-02 05:54:23 25 4
gpt4 key购买 nike

我遇到以下问题:

异常:OAuth token 端点失败:状态:正文:{“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"));
});

最佳答案

如果您使用公共(public)客户端应用程序并传递client_secret 生成访问 token 。

您可以验证您的应用程序是否是公共(public)客户端,如下所示:

enter image description here

移动和桌面应用程序是公共(public)客户端。如果您希望 Azure AD 应用程序公开,则可以通过在代码中排除以下行来避免提供 client_secret 参数:

microsoftOptions.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];

排除 client_secret 后,尝试生成访问 token 。

如果您希望您的应用程序保密,请确保更改现有的 Azure AD 应用程序/将新的 Azure AD 应用程序创建为WEB,如下所示:

转到 Azure 门户 -> Azure Active Directory -> 应用注册 -> 您的应用 -> 身份验证 -> 保存

enter image description here

此配置将使您的 Azure AD 应用程序保密,您可以传递 client_secret 来生成访问 token 。

我尝试通过 Postman 在我的环境中重现相同的情况,并成功获取 Web 应用程序的访问 token ,如下所示:

POST https://login.microsoftonline.com/TenantId/oauth2/v2.0/token

enter image description here

注意公共(public)应用程序受到限制,它们不能传递任何 secret 。

引用:

Public and confidential client apps (MSAL) - Microsoft Entra

关于.net - Azure AD Microsoft 帐户客户端是公共(public)的,因此不应显示 'client_assertion' 和 'client_secret',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73766505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com