2016-03-21 32 views
1

Wir versuchen folgende Szenario zu erstellen:WebAPI Verwendung mit ADFS zu authentifizieren

HTML-Seite sendet Ajax-Request an WebAPI fragen wheter Benutzer bestimmte Benutzerrolle hat oder nicht. WebApi überprüft von ADFS, ob der Benutzer angemeldet ist (andernfalls authentifiziert WebApi den Benutzer). WebApi liest dann Benutzerrollen aus ADFS und gibt die True/False-HTML-Seite zurück.

Was wir bisher haben:

Ajax sendet Get-Anfrage an WebAPI. In WebApi haben wir das Authorize-Tag, das den Benutzer korrekt an die ADFS-Authentifizierung sendet. Nach der Authentifizierung gibt ADFS jedoch eine HTML-Seite zurück, die SAML-Informationen anstelle von WebApi an den Client enthält. So, jetzt erstellen wir eine weitere Ajax-Anfrage (nach dieser Zeit), die HTML-Seite als Daten erhalten hat. WebApi analysiert dies dann und gibt basierend auf Benutzerrollen in SAML-Antwort entweder wahr/falsch zurück.

Fragen:

  1. Derzeit verwendete Mechanismus scheint klobig. Ist dieser Mechanismus korrekt oder gibt es einen besseren Weg?

  2. Wenn wir obige Methode verwenden, gibt es eine Möglichkeit, dass Benutzer bearbeitet HTML-Seite erhalten und gibt sich Rollen, die er nicht wirklich hat?

  3. Auch wenn der obige Mechanismus korrekt ist, haben wir immer noch einen Fehler, wenn WebApi zur Authentifizierung umleitet. Cors ist in WebApi's Startup.cs aktiviert. Wie werden wir das los?

Codes:

Ajax:

var uri = 'api/user'; 
$(document).ready(function() { 
     $.ajax({ 
     url: uri, 
     type: "Get", 
     success: function (data) { 
      $.ajax({ 
       url: uri, 
       type: "POST", 
       data: data, 
       success: function (value) { 
        if (value == true) { 
          $('#userData').text('You have correct role.'); 
        } 
        else { 
          $('#userData').text('You don't have correct role.'); 
        } 
       }, 
       error: function (jqXHR, textStatus, err) { 
         window.location.href = "NotLoggedIn.html"; 
       } 
      }) 
     }, 
     error: function (jqXHR, textStatus, err) { 
       window.location.href = "NotLoggedIn.html"; 
     } 
    }); 
}); 

Startup.Auth.cs:

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType); 

    app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions 
    { 
      MetadataAddress = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"], 
      Wtrealm = ConfigurationManager.AppSettings["ida:Audience"], 

    }); 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
      AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType 
    }); 
} 

Usercontroller:

namespace SSOWebApiSample.Controllers{ 
    [RoutePrefix("api/user")] 
    public class UserController : ApiController 
    { 
      [HttpGet] 
      [Route("")] 
      [Authorize] 
      public IHttpActionResult GetUser() 
      { 
        return Ok(); 
      } 

      [HttpPost] 
      [Route("")] 
      public async Task<IHttpActionResult> PostUser() 
      { 
        bool isAdditionalInfoAllowedUser = false; 
        string result = await Request.Content.ReadAsStringAsync(); 
        //Parse result here 
        return Ok(isAdditionalInfoAllowedUser); 
      } 
    } 
} 

Antwort

0

AdalJS wird dies sauber machen. Bitte beachten Sie die folgenden Schritte aus:

  1. To Do application adapted from Azure AD to ADFS
  2. Azure AD sample with CORS
  3. Enabling Cross-Origin Requests in ASP.NET Web API 2

erfolgreich CORS Web API mit ADFS-Authentifizierung, Anrufe zu tätigen, fand ich brauchte Beispiel zu setzen, Mieter, clientId und Endpunkte Mitglieder beim Aufruf von AdalAuthenticationService.init() in meiner Angular App Config. Siehe Beispiel zwei für Endpunkte, aber ersetzen Sie GUID durch URL.

Verwandte Themen