gpt4 book ai didi

authentication - 使用 Azure AD Multi-Tenancy openID 身份验证获取访问 token

转载 作者:行者123 更新时间:2023-12-04 04:28:31 25 4
gpt4 key购买 nike

我按照示例代码here进行操作创建具有 Azure AD Multi-Tenancy OpenID 身份验证的 MVC Web 应用程序。我使用以下代码来让用户登录。

public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}

现在我需要发送一个 Web API 调用,该调用也受我的 Azure AD 保护。目前,在发送请求之前,我使用 ADAL 库要求用户再次登录并获取访问 token ,如下所示。

AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult ar = ac.AcquireToken(resourceID, clientID, redirectURI, PromptBehavior.Always);
string accessToken = ar.AccessToken;

但是,由于 MVC 中使用的身份验证(如果用户来 self 的 AD)与用于保护 Web api 的身份验证相同。我想知道当用户使用此 openID 身份验证登录时是否有办法获取访问 token ,以便我可以跳过使用 ADAL 的第二次登录?

更新:根据 vibronet 的回答,我尝试使用以下代码来获取 token :

string authority = "https://login.windows.net/ucdavisprojecthotmail.onmicrosoft.com";

ClientCredential clientcred = new ClientCredential(clientId, appKey);
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult result = authContext.AcquireTokenSilent(resourceID, clientcred, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

这里,此代码在 MVC Web 应用程序中使用,clienId 和 appKey 是我要调用的 Web API 的 clientID 和 key 。 resoureID 是在 Azure 门户中获取的 Web API 的 APP ID URI。

但是,我收到此错误:无法静默获取 token 。调用AcquireToken方法。我遗漏了什么吗?

最佳答案

绝对是的。查看https://github.com/AzureADSamples/WebApp-WebAPI-MultiTenant-OpenIdConnect-DotNet ,它就像您一直在使用的示例,但另外还包含您所询问的访问 token 获取和使用。另请注意,AcquireTokenSilent 仅当缓存中有 token 时才能工作 - 可以直接使用或刷新。最后:当您请求 token 时,您必须指定您想要 token 的资源的 ID 以及执行请求的应用程序的 clientID。在您的代码中,您似乎使用了目标应用程序的 clientID。请参阅我上面链接的示例,它显示了此场景中使用的确切模式。

关于authentication - 使用 Azure AD Multi-Tenancy openID 身份验证获取访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186297/

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