2016-08-11 16 views
6

G'day!Xác thực WsFederation trong Service Fabric Owin Pipeline không hoạt động

Tôi chưa thấy nhiều về điều này vì tất cả đều rất mới tại thời điểm viết bài này. Tôi đang cố gắng viết một ứng dụng vải dịch vụ phục vụ một ứng dụng web (html/js) sau khi người dùng đã được xác thực qua ACS. Tôi có thể dễ dàng làm được điều này để làm việc với OWIN trong một môi trường vải phi dịch vụ, tức là một ứng dụng Asp Net truyền thống phía sau IIS. Tôi đang cố gắng sử dụng xác thực mã thông báo với Kiểm soát truy cập Azure.

Vì vậy, một cái gì đó để làm với thực tế là tôi bây giờ sử dụng vải dịch vụ đã thay đổi cách thức OWIN hoạt động? Dưới đây là OWIN ConfigureApp() chức năng của tôi trong vòng Startup.cs của tôi trong ứng dụng vải dịch vụ của tôi:

public static void ConfigureApp(IAppBuilder appBuilder) 
    {       
     appBuilder.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

     appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions()); 

     appBuilder.UseWsFederationAuthentication(
      new WsFederationAuthenticationOptions 
      { 
       Wtrealm = _realm, 
       MetadataAddress = _acsXmlMetaDataUrl 
      }); 

     // Configure Web API for self-host. 
     HttpConfiguration config = new HttpConfiguration(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     appBuilder.UseWebApi(config); 
    } 

Chú ý cách tôi tiêm WsFederation middleware trước api middleware web mà cuối cùng sẽ được sử dụng để phục vụ html trình duyệt của tôi/js ứng dụng. Bây giờ khi điều này ra mắt và tôi làm một bài kiểm tra sanity như điều hướng đến một url REST nội dung của tôi được phục vụ ngay lập tức thay vì được chuyển hướng đến Azure Access Control để đăng nhập và nhận được một mã thông báo auth. Trong ứng dụng Asp Net truyền thống của tôi với cùng một cấu hình OWIN, tôi thực sự được chuyển hướng đến Azure Access Control trước khi bất kỳ tài nguyên nào được phục vụ.

Vì vậy, câu hỏi của tôi là làm cách nào để chèn phần mềm trung gian WsFed vào đường ống OWIN sao cho điều này sẽ hoạt động trong ngữ cảnh vải dịch vụ?

Bất kỳ hỗ trợ nào sẽ được đánh giá cao, cảm ơn bạn đã dành thời gian!

Trả lời

1

Tôi không biết tại sao mã này hoạt động cho MVC chứ không phải cho Vải dịch vụ. Tôi đã có cùng một vấn đề, nhưng tôi tìm thấy một cách để làm cho nó hoạt động cho SF.

This article cung cấp hướng dẫn.

Về cơ bản, trong mã của bạn, bạn không yêu cầu xác thực. Bạn đang thiết lập mọi thứ nhưng bạn không bắt đầu.

app.Map("/login", map => 
      { 
       map.Run(async ctx => 
       { 
        if (ctx.Authentication.User == null || 
         !ctx.Authentication.User.Identity.IsAuthenticated) 
        { 
         ctx.Response.StatusCode = 401; 
        } 
        else 
        { 
         ctx.Response.Redirect("/"); 
        } 
       }); 
      }); 

app.Run(async ctx => 
      { 
       var user = ctx.Authentication.User; 
       var response = ctx.Response; 

       response.ContentType = "text/html"; 

       if (user != null && user.Identity.IsAuthenticated) 
       { 
        await response.WriteAsync(string.Format("<h2>{0}</h2>", 
         user.Claims.First().Issuer)); 

        await response.WriteAsync("<dl>"); 
        foreach (var claim in user.Claims) 
        { 
         await response.WriteAsync(string.Format(
          "<dt>{0}</dt> <dd>{1}</dd>", 
          claim.Type, 
          claim.Value)); 
        } 
        await response.WriteAsync("</dl>"); 
       } 
       else 
       { 
        await ctx.Response.WriteAsync("<h2>anonymous</h2>"); 
       } 
      }); 

Khi bạn truy cập vào một liên kết trên trang web của bạn, mã trong app.Run bắt đầu thực hiện để kiểm tra xem bạn đang đăng nhập. Nếu bạn không, trong trường hợp này, nó sẽ viết "nặc danh "trên trang thay vì tải nội dung của bạn. Để xác thực, truy cập yourwesite/login và nó sẽ chuyển hướng bạn đến bất kỳ nhà cung cấp auth nào bạn có trong cấu hình.

Kết luận: thêm thông tin đăng nhập, đăng xuất và ứng dụng.Cho đoạn, cung cấp cho nó một tinh chỉnh cuối cùng nếu bạn phải làm như vậy.

Các vấn đề liên quan