Swagger ui測試中的驗證 apikey
我們使用swagger 用來呈現webapi的接口,除了可以看到接口的說明和參數說明,還可以進行測試。但是我們的接口通常是有驗證的,不是隨便就能調用的,這時候用swagger怎么辦呢?
- 修改SwaggerConfig文件
- 添加api-key-header-auth.js文件
- 修改api-key-header-auth.js 文件
- 測試
1. 修改SwaggerConfig文件
取消這個的注釋,使生效。 c.BasicAuth("basic") .Description("Basic HTTP Authentication");
取消這個的注釋,使生效。 c.InjectJavaScript(thisAssembly, "wang2650.CustomContent.api-key-header-auth.js"); wang2650為項目名
2. 根目錄下創建 CustomContent 文件夾,添加api-key-header-auth.js文件 ,該段js會在調用接口的時候,在head中加入一個名為Authorization的key,內容為apikey的文本框中的值。
(function () {
$(function () {
$('#input_apiKey').show();
$('#input_apiKey').on('change', function () {
var key = this.value;
if (key && key.trim() !== '') {
swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", key, "header"));
}
});
});
})();
3. 修改api-key-header-auth.js 文件 文件屬性 要選擇嵌入資源
Authorization 文件中的這個名可以任意定義,我通常傳token
4.測試 假設你用DelegatingHandler的方式驗證 request.Headers.Authorization 就是apikey。
public class AuthenticationMessageHandler : DelegatingHandler {
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
if (request.Headers.Authorization == null)
{
var reply = request.CreateResponse(HttpStatusCode.Unauthorized, "acc_token驗證錯誤");
return Task.FromResult(reply);
}
//token驗證后,通過token獲取用戶信息,此處直接用apike做為用戶的身份證
var principal = new ClaimsPrincipal(new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, request.Headers.Authorization.ToString())
}, "Basic"));
// authorize attribute
request.GetRequestContext().Principal = principal;
}
}
[HttpGet]
public string GetId(dynamic id) {
return "用戶id:" + this.User.Identity.Name; //顯示api的值
}
運行網站,會在頭部出現一個apikey的文本框,到這,就完了。你可以開車了。