У нас есть веб-сервис, который требует аутентификации перед использованием. Когда вы вводите URL-адрес веб-службы прямо в браузере, все работает нормально. Однако, если вы попытаетесь вызвать этот же сервис из Javascript, он не будет работать, потому что аутентификация еще не произошла.
Я пытался вызвать getAccessTokenAsync (это часть библиотеки OfficeJS), но в итоге получил одну из этих 1300x ошибок. Кроме того, поскольку этот вызов все еще находится в режиме предварительного просмотра, я бы хотел его избежать.
Приведенный ниже код вызывается при вводе URL-адреса веб-службы непосредственно в окнах браузера. Вы аутентифицированы и все работает нормально.
Я просто не знаю, как выполнить эквивалентную аутентификацию из приложения-функции Azure или из Javascript (из веб-надстройки)
public partial class AuthStartup
{
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
// This part is for web sso so web pages can consume the API without obtaining a token
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
// http://www.cloudidentity.com/blog/2014/11/17/skipping-the-home-realm-discovery-page-in-azure-ad/
Notifications = new WsFederationAuthenticationNotifications
{
RedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.Whr = "ourcompany.com";// similar effect to domain_hint from client so users never see the "choose account" prompt
return Task.FromResult(0);
}
},
MetadataAddress = ConfigurationManager.AppSettings["ida:MetadataAddress"],
Wtrealm = ConfigurationManager.AppSettings["ida:Audience"],
// this part is needed so that cookie and token auth can coexist
TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new string[] { $"spn:{ConfigurationManager.AppSettings["ida:Audience"]}" }
}
});
// This part is for bearer token authentication
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
MetadataAddress = ConfigurationManager.AppSettings["ida:MetadataAddress"],
});
}
}