доставить токен вручную (в дополнение к способу настройки owin) - PullRequest
0 голосов
/ 13 июня 2019

На самом деле у меня есть веб-приложение asp.net, которое может доставлять токен пользователю следующим образом:

  1. пользователь входит в приложение, переходит на определенную страницу и получает клиентскую информацию и секрет клиента.
  2. затем он вызывает следующий api ".... api / token", передавая clientid и clientsecret (тип предоставления учетных данных клиента) для получения токена.

Это связанный код:

using Microsoft.Owin;
using Owin;
using System;
using Microsoft.Owin.Security.OAuth;

[assembly: OwinStartup(typeof(MyApp.Web.App_Start.OwinStartup))]

namespace MyApp.Web.App_Start
{
    public class OwinStartup
    {
        public void Configuration(IAppBuilder app)
        {
            OwinWebApiStartup.Configuration(app);            
        }
    }
}

public static class OwinWebApiStartup
{
    public static void Configuration(IAppBuilder app)
    {
        var provider = //my provider implementation;
        var oauthServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/api/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
            Provider = provider,
        };

        app.UseOAuthAuthorizationServer(oauthServerOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {
            AccessTokenProvider = //my provider implementation,
        });
   }
}

Это хорошо работает. Но я хотел бы добавить новую функцию, когда клиентский код javascript, а не пользователь, хотел бы вызывать мой apis, и поэтому он должен иметь токен, но не иметь клиентские и клиентские секреты. Это моя идея:

Создайте новую конечную точку API, (только эта будет доступна моему клиентскому коду javascript без токена, и там этот код сгенерирует токен (благодаря имени пользователя текущего подключенного пользователя) и вернет этот (что будут быть тем же, что пользователь мог получить с помощью существующего метода) для использования клиентским кодом javascript

1 Ответ

0 голосов
/ 14 июня 2019

Я сталкивался с этой проблемой в прошлом.Я решил это с помощью строки запроса, потому что owin мог предоставить только один ресурс токена.На самом деле имеет смысл полагаться на owin и не реализовывать свой собственный код.

Мое псевдо-решение:

KeyValuePair<string, string[]> typePair = ctx.Request.Query.FirstOrDefault(x => x.Key == "type");
LoginType? loginType = GetLoginType(typePair);
[...]
switch (loginType)
        {
            case LoginType.User:
            [...]
            ////within this routine you could set your claims depending on your needs

Если вы получите другое решение, я был бы благодарен за предоставление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...