Получение «ошибки»: «Unsupported_grant_type», пытаясь получить JWT, позвонив в защитный API Oauth Oauth через почтальонC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение «ошибки»: «Unsupported_grant_type», пытаясь получить JWT, позвонив в защитный API Oauth Oauth через почтальон

Сообщение Anonymous »

Я последовал этой статье, чтобы реализовать сервер авторизации OAuth. Однако, когда я использую Post Man, чтобы получить токен, я получаю ошибку в ответе: < /p>


"Ошибка": "Unsupported_grant_type" < /p>
< /blockquote>

. Тип контента: приложение/x-www-form-urlencoded . Я подготовил необходимые настройки в почте: < /p>

< /p>

, и все же мои заголовки похожи на это: < /p>
Здесь "src =" https://i.sstatic.net/gtkrp.png " /> < /p>

Вот мой код < /p>

Код: Выделить всё

public class CustomOAuthProvider : OAuthAuthorizationServerProvider
{
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
return Task.FromResult(null);
}

public override Task MatchEndpoint(OAuthMatchEndpointContext context)
{
if (context.OwinContext.Request.Method == "OPTIONS" && context.IsTokenEndpoint)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "POST" });
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "accept", "authorization", "content-type" });
context.OwinContext.Response.StatusCode = 200;
context.RequestCompleted();
return Task.FromResult(null);
}
return base.MatchEndpoint(context);
}

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
string allowedOrigin = "*";

context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Content-Type" });

Models.TheUser user = new Models.TheUser();
user.UserName = context.UserName;
user.FirstName = "Sample first name";
user.LastName = "Dummy Last name";

ClaimsIdentity identity = new ClaimsIdentity("JWT");

identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
foreach (string claim in user.Claims)
{
identity.AddClaim(new Claim("Claim", claim));
}

var ticket = new AuthenticationTicket(identity, null);
context.Validated(ticket);
}
}

public class CustomJwtFormat : ISecureDataFormat
{
private readonly string _issuer = string.Empty;

public CustomJwtFormat(string issuer)
{
_issuer = issuer;
}

public string Protect(AuthenticationTicket data)
{
string audienceId = ConfigurationManager.AppSettings["AudienceId"];
string symmetricKeyAsBase64 = ConfigurationManager.AppSettings["AudienceSecret"];
var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);
var signingKey = new HmacSigningCredentials(keyByteArray);
var issued = data.Properties.IssuedUtc;
var expires = data.Properties.ExpiresUtc;
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);
var handler = new JwtSecurityTokenHandler();
var jwt = handler.WriteToken(token);
return jwt;
}

public AuthenticationTicket Unprotect(string protectedText)
{
throw new NotImplementedException();
}
}
< /code>

В классе CustomJwtformat выше только точка останова в конструкторе получает удар. В классе Customoauth точка останова в методе GrantresourceOwnerCredentials никогда не попадает. Другие делают.  < /p>

Класс запуска: < /p>

public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);

ConfigureOAuthTokenGeneration(app);
ConfigureOAuthTokenConsumption(app);

app.UseWebApi(config);
}

private void ConfigureOAuthTokenGeneration(IAppBuilder app)
{
var OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat(ConfigurationManager.AppSettings["Issuer"])
};

// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
}

private void ConfigureOAuthTokenConsumption(IAppBuilder app)
{
string issuer = ConfigurationManager.AppSettings["Issuer"];
string audienceId = ConfigurationManager.AppSettings["AudienceId"];
byte[] audienceSecret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["AudienceSecret"]);

// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audienceId },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)
}
});
}
}
Мне нужно настроить контент-тип: приложение/xwww-form-urlencoded где-то еще в коде веб-API? Что может быть не так? Пожалуйста, помогите.

Подробнее здесь: https://stackoverflow.com/questions/293 ... calling-an
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Позвонив Grafana API возвращает 401 несанкционированный
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как отправить сигнал "ctrl+c" / sigint, чтобы Gradle javaexec type type type jvm?
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как позвонить в защитный API REST, используя сертификат и пароль .pfx в шаблоне Spring Boot Rest? [закрыто]
    Гость » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Гость
  • Защитный запрос от SQL-инъекции с использованием PDO
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Запрошенный код авторизации типа Grant с помощью Curl и Web
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»