gpt4 book ai didi

azure - 使用 OpenId Connect 针对 Azure Active Directory 获取 token

转载 作者:行者123 更新时间:2023-12-01 13:38:53 25 4
gpt4 key购买 nike

我在使用 OpenIdConnect 针对 Azure Active Directory 请求授权 token 时遇到问题。

我尝试了多种方法,使用 AuthenticationContext.AcquireTokenByAuthorizationCodeAsync 将身份验证代码传递给我们的 AD 租户。

我收到的具体错误是“AADSTS70002:验证凭据时出错。AADSTS50011:回复地址“http://localhost:5000/api/home/index”与请求时提供的回复地址“http://localhost:5000/signin-oidc”不匹配刺授权码。”

我不确定为什么 AD 认为我的回复 URL 是 Signin-oidc。我在 AuthorizationContext 实例中将回复 url 设置为“http://localhost:5000/api/home/index ”;源代码如下。我读到尾随/可能是一个问题,但我在回复网址中没有看到这一点。另外,我在代码中的回复网址与我在 AD 中的 Web api 中注册的网址相同。

如有任何帮助,我们将不胜感激。我读过很多关于如何针对 Azure AD 使用 OpenId Connect 的示例,但它们似乎非常不一致。

Stack Trace for requesting authorization t

Azure AD Reply URLs

 // Configure the OWIN pipeline to use OpenIDConnect.
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
//AuthenticationScheme = "oidc",
Authority = authority,
ClientId = clientId,
Scope = { "openid profile email offline" },
ResponseType = OpenIdConnectResponseType.CodeIdToken,
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false
},

Events = new OpenIdConnectEvents
{
OnAuthorizationCodeReceived = async context =>
{
var clientCred = new ClientCredential(clientId, clientSecret);

var tenantId = "xxxx.onmicrosoft.com";

var resource = new Uri(string.Format(organizationHostName, "*"));

var authContext = new AuthenticationContext(aadInstance + tenantId);

var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code,
new Uri(redirectUri), clientCred, "https://login.windows.net/xxxxxxx-xxxx-xxxx-xxxxxxxxxxx/oauth2/token");

context.TokenEndpointRequest.RedirectUri = redirectUri;
},

OnAuthenticationFailed = (context) => Task.FromResult(0)
},
});

最佳答案

当您使用授权代码流请求访问 token 时,您必须提供用户刚刚登录的相同重定向 URI。我想这将是 http://localhost:5000 .

authContext.AcquireTokenByAuthorizationCodeAsync 的最后一个参数应该是您想要访问 token 的 API 的资源 URI。目前,您已将其设置为 token 端点 URL,但这不起作用。如果您想要 Azure AD Graph API 的 token ,则必须将其设置为 https://graph.windows.net

所以它应该是这样的:

var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code,
new Uri("http://localhost:5000/signin-oidc"), clientCred, "https://graph.windows.net");

这应该不是必需的:

context.TokenEndpointRequest.RedirectUri = redirectUri;

关于azure - 使用 OpenId Connect 针对 Azure Active Directory 获取 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42030066/

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