2015-03-26 18 views
11

Tôi đang cố gắng sử dụng Swashbuckle 5.0.x với OAuth2. Tôi muốn sử dụng Trợ cấp chứng chỉ mật khẩu chủ sở hữu tài nguyên của OAuth2. Về cơ bản, tôi chỉ muốn hỏi mã thông báo trước và bao gồm mã thông báo này trong mỗi yêu cầu (ví dụ: không cần phạm vi).Swagger/Swashbuckle: OAuth2 với chứng chỉ mật khẩu chủ sở hữu tài nguyên Grant

Có ai có thể trợ giúp việc này không? Làm thế nào để tôi phải cấu hình swagger/swashbuckle?

Trả lời

10

OK, tôi giải quyết nó như thế này:

Thêm Javascript hoàn-handler để vênh vang:

config 
    .EnableSwagger(c => { 
        //do stuff 
    }) 
    .EnableSwaggerUi(c => { 
     c.InjectJavaScript(typeof(Startup).Assembly, "MyNamespace.SwaggerExtensions.onComplete.js"); 
    }); 

Tham username: mật khẩu từ hộp API_KEY:

$('#input_apiKey').change(function() { 
    var key = $('#input_apiKey')[0].value; 
    var credentials = key.split(':'); //username:password expected 
    $.ajax({ 
     url: "myURL", 
     type: "post", 
     contenttype: 'x-www-form-urlencoded', 
     data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1], 
     success: function (response) { 
      var bearerToken = 'Bearer ' + response.access_token; 
      window.authorizations.add('key', new ApiKeyAuthorization('Authorization', bearerToken, 'header')); 
     }, 
     error: function (xhr, ajaxoptions, thrownerror) { 
      alert("Login failed!"); 
     } 
    }); 
}); 
+0

Ông có thể xin ghi rõ nơi bạn thêm đoạn mã đầu tiên "config.EnableSwagger ... "? Thứ hai khi tôi đã thêm bạn vào index.html, tôi có đúng không? – zubactik

+0

Tôi đã thêm điều này vào Startup.cs (khởi động OWIN). Thứ hai là một tệp JavaScript (onComplete.js), một tài nguyên nhúng mà tôi đã thêm vào dự án ASP.NET Web API của mình. – Dunken

+1

Tôi đã phải đăng một câu trả lời mới để làm cho nó hoạt động với phiên bản mới nhất –

15

Cảm ơn bạn @Dunken. Câu trả lời của bạn gần như giải quyết vấn đề của tôi, nhưng để làm cho nó làm việc với phiên bản mới nhất Swashbuckle tôi đã phải thay đổi nó một chút như thế này

$('#explore').off(); 

$('#explore').click(function() { 
    var key = $('#input_apiKey')[0].value; 
    var credentials = key.split(':'); //username:password expected 

$.ajax({ 
    url: "yourAuthEndpoint", 
    type: "post", 
    contenttype: 'x-www-form-urlencoded', 
    data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1], 
    success: function (response) { 
     var bearerToken = 'Bearer ' + response.access_token; 

     window.swaggerUi.api.clientAuthorizations.add('Authorization', new SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header')); 
     window.swaggerUi.api.clientAuthorizations.remove("api_key"); 
     alert("Login successfull"); 
     }, 
     error: function (xhr, ajaxoptions, thrownerror) { 
     alert("Login failed!"); 
     } 
    }); 
}); 
+0

Hoàn hảo! Vui lòng, bao gồm '}) cuối cùng' vào khối mã. – Neshta

+0

Xong. Cảm ơn bạn đã chỉ cho tôi định dạng sai. –

+0

Đang cố gắng thực hiện việc này. Tôi đã thêm tập lệnh vào dự án của mình trong thư mục gốc. Đánh dấu nó như là một nguồn tài nguyên nhúng nhưng khi tôi xây dựng lại và tải giao diện người dùng swagger nó nói nó không thể tốt nó. – ToddB

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