C# 如何为Web API指定不同的AADInstance?
我正在将Web Api与azure中国active directory集成,并部署到azure中国环境。azure中国的端点与常规azure环境完全不同。我想知道如何为Web API指定AADInstance webapi启动.Auth.csC# 如何为Web API指定不同的AADInstance?,c#,azure,asp.net-web-api,azure-active-directory,azure-china,C#,Azure,Asp.net Web Api,Azure Active Directory,Azure China,我正在将Web Api与azure中国active directory集成,并部署到azure中国环境。azure中国的端点与常规azure环境完全不同。我想知道如何为Web API指定AADInstance webapi启动.Auth.cs app.UseWindowsAzureActiveDirectoryBearerAuthentication( new WindowsAzureActiveDirectoryBearerAuthenticationOptions {
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
ApplicationDbContext db = new ApplicationDbContext();
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = Authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications()
{
// If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
AuthorizationCodeReceived = (context) =>
{
var code = context.Code;
ClientCredential credential = new ClientCredential(clientId, appKey);
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);
return Task.FromResult(0);
}
}
});
webapi Web.Config
<add key="ida:Tenant" value="directoryname.partner.onmschina.cn" />
<add key="ida:Audience" value="https://directoryname.partner.onmschina.cn/AppName" />
<add key="ida:ClientID" value="…" />
<add key="ida:Password" value="…" />
<add key="ida:ClientId" value="…" />
<add key="ida:AADInstance" value="https://login.chinacloudapi.cn/" />
<add key="ida:ClientSecret" value="…" />
<add key="ida:Domain" value="directoryname.partner.onmschina.cn" />
<add key="ida:TenantId" value="…" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:44300/" />
MVC Web.Config
<add key="ida:Tenant" value="directoryname.partner.onmschina.cn" />
<add key="ida:Audience" value="https://directoryname.partner.onmschina.cn/AppName" />
<add key="ida:ClientID" value="…" />
<add key="ida:Password" value="…" />
<add key="ida:ClientId" value="…" />
<add key="ida:AADInstance" value="https://login.chinacloudapi.cn/" />
<add key="ida:ClientSecret" value="…" />
<add key="ida:Domain" value="directoryname.partner.onmschina.cn" />
<add key="ida:TenantId" value="…" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:44300/" />
关于使用不同主权云的应用程序,这里需要注意的几点:
- 您使用了正确的登录端点()
- 您为该环境()使用了正确的资源标识符
- 您使用了正确的客户端id,该id是为该环境注册的
- 您可以使用正确的回复url以及为该环境注册的其他配置
我希望这有助于解决你的问题,这是一个有点广泛的开始。如果您有更具体的后续问题,请在下面进行评论。是的,我们必须设置元数据端点。如中所述 我在web.config中添加了一个条目
<add key="ida:AADInstance" value="login.microsoftonline.com" />
现在它工作了。Ahhh,我明白你现在在问什么了。在您展示的示例中,您使用了两个非常不同的包;一个用于创建令牌(在Web Api中),另一个用于验证令牌(MVC),非常感谢。非常感谢您的帮助。要在中国访问Azure广告,我们必须使用“/>