Как реализовать сервер OAuth2, которые в ASP.NET MVC 5 и веб-API 2



сначала я набросаю свой проект:



для моего Стажера мне нужно добавить функциональность в существующую систему. Сторонний клиент должен иметь возможность доступа к данным из веб-служб AX, как только он авторизован пользователем через oauth2. Я понимаю, что мне нужно сделать "прокси-веб-сервис", где клиент может совершать свои звонки, и это вызывает службы AX, но я немного не уверен в части oauth2. Большинство учебников и руководств об использовании ASP.NET ' S идентичность для facebook или google входы. Мне это не нужно, мне нужно использовать существующие учетные данные, поэтому мне нужно сделать свою собственную службу oauth2.



Мне трудно найти учебники, руководства или объяснения на этот счет. Я понимаю oauth2 и то, что должно быть сделано, но я никогда не делал такого раньше, и мне трудно начать. Самое близкое к тому, что мне нужно, что я нашел это GitHub repo link, но решение не строить.



то, что я имел в виду, делает ASP.NET сайт MVC где клиенты (третьи лица) могут зарегистрироваться и получить свой идентификатор клиента. с ASP.NET API я хотел создать API, который принимает необходимые маркеры и параметры, а затем получить доступ к службам Dyn AX.



это правильно или я совершенно неправильно? Любая помощь или ссылки, касающиеся создания собственного сервера/сервиса oauth2, были бы хороши.

1320   4  

4 ответов:

я также изо всех сил пытался найти статьи о том, как просто создать часть токена. Я так и не нашел его и написал свой собственный. Так что если это поможет:

то, что нужно сделать:

  • создать новое веб-приложение
  • установите следующие пакеты NuGet:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • добавить OWIN startup класс

затем создайте HTML и JavaScript (index.js) файл с этим содержимым:

var loginData = 'grant_type=password&[email protected]&password=test123';

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
        alert(xmlhttp.responseText);
    }
}
xmlhttp.open("POST", "/token", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(loginData);
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>

в долг startup класс должен иметь такое содержание:

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

[assembly: OwinStartup(typeof(Startup))]

namespace OAuth20
{
    public class Startup
    {
        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

        public void Configuration(IAppBuilder app)
        {
            OAuthOptions = new OAuthAuthorizationServerOptions()
            {
                TokenEndpointPath = new PathString("/token"),
                Provider = new OAuthAuthorizationServerProvider()
                {
                    OnValidateClientAuthentication = async (context) =>
                    {
                        context.Validated();
                    },
                    OnGrantResourceOwnerCredentials = async (context) =>
                    {
                        if (context.UserName == "[email protected]" && context.Password == "test123")
                        {
                            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                            context.Validated(oAuthIdentity);
                        }
                    }
                },
                AllowInsecureHttp = true,
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1)
            };

            app.UseOAuthBearerTokens(OAuthOptions);
        }
    }
}

запустить свой проект. Маркер должен отображаться во всплывающем окне.

Я исследую то же самое и наткнулся на identityserver который реализует OAuth и OpenID поверх ASP.NET. он интегрируется с ASP.NET идентичность и Перезагрузка Членство С поддержкой сохраняемости для Entity Framework.

Итак, чтобы ответить на ваш вопрос, ознакомьтесь с их подробным документом на как настроить сервер OAuth и OpenID.

Gmail: OAuth

  • перейти ссылке
  • войти с помощью пароля пользователя gmail
  • нажмите на меню google в левом верхнем углу
  • нажмите API Manager
  • нажмите на учетные данные
  • Нажмите кнопку создать учетные данные и выберите OAuth Client
  • выберите веб-приложение в качестве типа приложения и введите имя-> введите авторизованный URL перенаправления (например: http://localhost:53922/signin-google) ->нажмите на кнопку Создать. Это создаст учетные данные. Пожалуйста, обратите внимание Client ID и Secret ID. Наконец нажмите кнопку ОК, чтобы закрыть всплывающие учетные данные.
  • Следующий важный шаг-включить Google API. Нажмите на обзор в левой панели.
  • нажмите на кнопку Google API В разделе Социальные API.
  • Нажмите Кнопку "Включить".

это все из части Google.

приходят вернемся к вашему приложению, откройте App_start/Startup.Auth.cs и раскомментируйте следующий фрагмент

        app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = "",
            ClientSecret = ""
        });

обновить ClientId и ClientSecret со значениями от Google API учетные данные, которые вы уже создали.

  • запустите приложение
  • Нажать Для Входа
  • вы увидите кнопку Google в разделе "использовать другой раздел для входа в систему" раздел
  • нажмите на кнопку Google
  • приложение предложит вам ввести имя пользователя и пароль
  • введите имя пользователя и пароль gmail и нажмите Войти
  • это выполнит OAuth и вернется к вашему приложению и предложит Вам зарегистрироваться в Gmail id.
  • Нажмите кнопку Регистрация, чтобы зарегистрировать Gmail ID в базе данных приложения.
  • вы увидите, что идентификационные данные отображаются в верхней части как обычная регистрация
  • попробуйте выйти из системы и снова войти в систему через Gmail. Это будет автоматически вход в приложение.

Comments

    Ничего не найдено.