1

Я создал приложение MVC, использующее аутентификацию Active Directory Active Directory с помощью OpenOffice. Это отлично подходит для конечных пользователей, но я хотел бы добавить веб-сайт на сайт, который будет называть его собственную конечную точку (тот же метод http-почты, который будут использоваться пользователями). Я нашел этот пример https://github.com/AzureADSamples/Daemon-DotNet, который позволяет серверному приложению вызывать конечную точку webapi.Аутентификация Active Directory Active Directory - использование OpenId Connect и аутентификации на предъявителя в MVC

Мой класс конфигурации авторизации выглядит следующим образом:

public class StartAuth 
{ 
    private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"]; 
    private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"]; 
    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"]; 
    private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"]; 
    private static string audience = ConfigurationManager.AppSettings["ida:Audience"]; 

    string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant); 

    public void Configuration(IAppBuilder app) 
    { 
     app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

     app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions 
      { 
       ClientId = clientId, 
       Authority = authority, 
       PostLogoutRedirectUri = postLogoutRedirectUri, 
      }); 

     app.UseWindowsAzureActiveDirectoryBearerAuthentication(
      new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
      { 
       Tenant = tenant, 
       TokenValidationParameters = new TokenValidationParameters 
       { 
        ValidAudience = audience 
       } 
      }); 
    } 
} 

Запрос от моего веб-работы консольного приложения выглядит следующим образом (я заменил ключ носителя и хозяина):

POST  
https://some-random-host/myendpoint  
HTTP/1.1 
Authorization: Bearer key 
Host: some-random-host 
Content-Length: 0 

и ответ от сервера выглядит следующим образом: (заменил хост, ключ, идентификатор арендатора и усечен значение местоположения):

HTTP/1.1 302 Found 
Cache-Control: private 
Content-Length: 0 
Location: https://login.windows.net/tenant-id/oauth2/authorize.... 
Server: Microsoft-IIS/8.0 
Set-Cookie: OpenIdConnect.nonce.u%noncekey; path=/; secure; HttpOnly 
WWW-Authenticate: Bearer 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Set-Cookie: ARRAffinity=key;Path=/;Domain=some-random-host 
Date: Thu, 19 Mar 2015 11:44:11 GMT 

Любые идеи, почему сервер отвечает местоположением входа? Очевидно, что это отлично работает, когда пользователи пытаются попасть в аутентифицированную конечную точку, но не для моего консольного приложения.

Благодарим за помощь. Пожалуйста, дайте мне знать, если какая-либо другая информация будет полезна.

ответ

0

Поскольку Azure WebJobs не привязан к определенному пользователю при аутентификации с помощью ключа, у вас не может быть атрибута authorize для метода/контроллера с указанными пользователями. Это создает общий смысл, но я кое-что забыл, пока Омер не напомнил мне проверить атрибуты.

Фактически, пользователь фактически является нулевым.

Таким образом, вместо того, чтобы иметь: [авторизовать (Пользователи = «[email protected]»] мне нужно было просто: [Авторизоваться]

Я не уверен, если есть способ, чтобы указать, что только у WebJob есть разрешения.

1

Blog post here that explains in detail один связанный с:

Ваш конфиг выглядит правильно, но вам не хватает для определения обработчика.

Вы должны указать обработчик в вашем API класса контроллера:

[HostAuthentication("OAuth2Bearer")] 
[Authorize] 
public class YourAPIController : ApiController 
{ 

HostAuthentication ключевое слово описывает обработчик для вашего контроллера.

Смежные вопросы