gpt4 book ai didi

Azure Active Directory 单租户单独的 webapi 应用程序访问

转载 作者:行者123 更新时间:2023-12-03 04:29:30 26 4
gpt4 key购买 nike

我设置了两个 Azure Active Directory 应用程序。

为简洁起见,App-AApp-B

A 是一个 Web 应用程序,在本地主机上运行,​​而 B 发布到 somedomain.azurewebsites.net 并公开 webapi。

两者都设置为:

app.UseCookieAuthentication(new CookieAuthenticationOptions(){
AutomaticAuthenticate = true,
AutomaticChallenge = true
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
ClientId = Configuration["Authentication:AzureAd:ClientId"],
Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"],
CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
TokenValidationParameters = new TokenValidationParameters{
SaveSigninToken = true,
},
Events = new OpenIdConnectEvents{
OnAuthenticationFailed = OnAuthenticationFailed,
OnAuthorizationCodeReceived = OnAuthorizationCodeReceived,
OnMessageReceived = OnMessageReceived,
OnTicketReceived = OnTicketRecieved,
OnTokenValidated = OnTokenValidated,
OnUserInformationReceived = OnUserInformationReceived,
OnTokenResponseReceived = OnTokenResponseRecieved,
OnRemoteFailure = OnRemoteFailure
}
});

现在,App-B 允许向 App-A 委派权限,反之亦然。我还将 App-A 的回复 URL 添加到 App-B 中,http://localhost:5000/signin-oidc

App-A 在尝试访问[Authorize]的 Controller 时,必须登录并从 Microsoft 路由到登录页面。现在在此登录页面上,如何在第一次登录时立即允许访问 App-B web-api?我可以通过初始握手/登录以某种方式发送访问 token ,还是进行另一次往返以收集类似于下面的 token 的正确方法?

如果我需要进行另一次往返,是否有最新的示例代码块?我似乎无法让代码片段工作。

我找到的所有示例都是这样的:

private Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext context){
var code = context.Code;
ClientCredential credential = new ClientCredential(clientId, appKey);
string tenantID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
AuthenticationContext authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", tenantID), new EFADALTokenCache(signedInUserID));
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceID);

但我什至没有看到 code 是上下文的属性?我目前使用的是最新版本的 netcore。

我的主要目标是使用从初始登录中以某种方式检索到的 token 对 App-B 端点进行 HttpClient 调用。

最佳答案

上下文对象已更改:

  context.ProtocolMessage.Code

代码流将自动将访问 token 存储在缓存中,您随后可以使用以下方式检索该 token :

  authContext.AcquireTokenSilentAsync

使用最新的 .netcore 更新示例:

https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore/tree/master/WebApp-WebAPI-OpenIdConnect-DotNet

关于Azure Active Directory 单租户单独的 webapi 应用程序访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928538/

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