スワッガーを私のwebApiに(Swashbuckle経由で)設定しようとしています。私はそれが私のメソッドを正常に表示し、開いているメソッドがうまく動作するという点まであります。クライアントサイドのoAuth資格情報を有効にするスワッガー
私のApiのメソッドのほとんどは、client_credentials
グラントタイプを使用して、認証にoAuth2を使用します。私はユーザーがテキストボックスに資格情報を入力し、それを使用できるようにスワッガーUIを設定しようとしています。
これは私がこれまで持っているものです。
Swashbuckleコンフィグ
public static class SwashbuckleConfig
{
public static void Configure(HttpConfiguration config)
{
config.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "Configuration Api Config");
c.OAuth2("oauth2")
.Description("OAuth2")
.Flow("application")
.TokenUrl("http://localhost:55236/oauth/token")
.Scopes(scopes =>
{
scopes.Add("write", "Write Access to protected resources");
});
c.OperationFilter<AssignOAuth2SecurityRequirements>();
})
.EnableSwaggerUi(c =>
{
c.EnableOAuth2Support("Test", "21", "Test.Documentation");
c.InjectJavaScript(Assembly.GetAssembly(typeof(SwashbuckleConfig)),
"InternalAPI.Swagger.client-credentials.js");
});
}
public class AssignOAuth2SecurityRequirements : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry,
ApiDescription apiDescription)
{
//All methods are secured by default,
//unless explicitly specifying an AllowAnonymous attribute.
var anonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>();
if (anonymous.Any()) return;
if (operation.security == null)
operation.security = new List<IDictionary<string, IEnumerable<string>>>();
var requirements = new Dictionary<string, IEnumerable<string>>
{
{ "oauth2", Enumerable.Empty<string>() }
};
operation.security.Add(requirements);
}
}
}
クライアントcredentials.js
(function() {
$(function() {
var basicAuthUi =
'<div class="input">' +
'<label text="Client Id" /><input placeholder="clientId" id="input_clientId" name="Client Id" type="text" size="25">' +
'<label text="Client Secret" /><input placeholder="secret" id="input_secret" name="Client Secret" type="password" size="25">' +
'</div>';
$(basicAuthUi).insertBefore('div.info_title');
$("#input_apiKey").hide();
$('#input_clientId').change(addAuthorization);
$('#input_secret').change(addAuthorization);
});
function addAuthorization() {
var username = $('#input_clientId').val();
var password = $('#input_secret').val();
if (username && username.trim() !== "" && password && password.trim() !== "") {
//What do I need to do here??
//var basicAuth = new SwaggerClient.oauth2AUthorisation(username, password);
//window.swaggerUi.api.clientAuthorizations.add("oauth2", basicAuth);
console.log("Authorization added: ClientId = "
+ username + ", Secret = " + password);
}
}
})();
私がしようとしていたクライアント側の例変更はhereです。明らかにこれはBasic認証用ですが、oAuthに合わせて変更する必要があります。
Apiメソッドを呼び出す前にトークンを生成するには、どうすればよいですか?
私はこれがあなたが見ていると思います:http://stackoverflow.com/questions/39729188/im-not-getting-a-scope-checkbox-when-the-authorize-tag-doesnt -contain-roles-a/39750143#39750143 –