[asp.net] ASP.NET MVC 5 및 WEB API 2에서 oauth2 서버를 구현하는 방법 [닫기]

먼저 프로젝트를 스케치하겠습니다.

인턴쉽을 위해서는 기존 시스템에 기능을 추가해야합니다. OAuth2를 통해 사용자가 권한을 부여한 타사 클라이언트는 AX 웹 서비스의 데이터에 액세스 할 수 있어야합니다. 나는 클라이언트가 전화를 걸고 AX 서비스를 호출 할 수있는 ‘프록시 웹 서비스’를 만들어야한다는 것을 이해하지만 OAuth2 부분에 대해서는 약간 확실하지 않습니다. 대부분의 자습서 및 안내서는 Facebook 또는 Google 로그인에 ASP.NET의 ID를 사용하는 것에 관한 것입니다. 필요하지 않습니다. 기존 자격 증명을 사용해야하므로 고유 한 OAuth2 서비스를 만들어야합니다.

이에 대한 자습서, 안내서 또는 설명을 찾기가 어렵습니다. OAuth2와 수행해야 할 작업을 이해하지만 이전에는 그런 일을 한 적이 없으며 시작하기가 어렵습니다. 내가 찾은 것에 가장 가까운 것은이 github repo link 이지만 솔루션은 빌드되지 않습니다.

내가 염두에 둔 것은 클라이언트 (타사)가 자신을 등록하고 고객 ID를 얻을 수있는 ASP.NET MVC 웹 사이트를 만드는 것입니다. ASP.NET API를 사용하여 필요한 토큰과 매개 변수를 취하는 API를 만들고 Dyn AX 서비스에 액세스하려고했습니다.

이것이 맞습니까? 아니면 완전히 틀렸습니까? 자신 만의 oauth2 서버 / 서비스 구축에 관한 도움이나 링크가 있으면 좋을 것입니다.



답변


답변

또한 토큰 부분을 생성하는 방법에 대한 기사를 찾는 데 어려움을 겪었습니다. 나는 하나를 찾지 못했고 내 자신을 썼다. 도움이된다면 :

해야 할 일은 :

  • 새로운 웹 애플리케이션 만들기
  • 다음 NuGet 패키지를 설치하십시오.
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • OWIN startup클래스 추가

그런 다음 index.js다음 내용 으로 HTML과 JavaScript ( ) 파일을 작성하십시오 .

var loginData = 'grant_type=password&username=test.test@mail.com&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>

OWIN 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 == "test.test@mail.com" && context.Password == "test123")
                        {
                            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
                            context.Validated(oAuthIdentity);
                        }
                    }
                },
                AllowInsecureHttp = true,
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1)
            };

            app.UseOAuthBearerTokens(OAuthOptions);
        }
    }
}

프로젝트를 실행하십시오. 팝업에 토큰이 표시되어야합니다.


답변

나는 똑같은 것을 연구하고 ASP.NET 위에 OAuth와 OpenID를 구현 하는 identityserver 를 우연히 발견했습니다 . Entity Framework에 대한 지속성 지원을 통해 ASP.NET IDMembership Reboot 와 통합됩니다 .

따라서 질문에 대답 하려면 OAuth 및 OpenID 서버 설정 방법에 대한 자세한 문서를 확인하십시오 .


답변

Gmail : OAuth

  • 고토 링크
  • Gmail 사용자 이름 비밀번호로 로그인
  • 왼쪽 상단의 Google 메뉴를 클릭하십시오
  • API 관리자를 클릭하십시오.
  • 자격 증명을 클릭하십시오
  • 신임 정보 작성을 클릭하고 OAuth 클라이언트를 선택하십시오.
  • 웹 애플리케이션을 애플리케이션 유형으로 선택하고 이름-> 권한있는 리디렉션 URL 입력 (예 : http : // localhost : 53922 / signin-google )-> 생성 버튼을 클릭하십시오. 자격 증명이 생성됩니다. PLS의 메모를 확인 Client ID하고 Secret ID. 마지막으로 확인을 클릭하여 자격 증명 팝업을 닫습니다.
  • 다음으로 중요한 단계는를 활성화하는 것 Google API입니다. 왼쪽 창에서 개요를 클릭하십시오.
  • Google API아래의 소셜 API 섹션을 클릭하십시오 .
  • 사용을 클릭하십시오.

그게 전부 구글 부분입니다.

애플리케이션으로 돌아와서 App_start/Startup.Auth.cs다음 스 니펫을 열고 주석을 해제하십시오.

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

업데이트 ClientIdClientSecret의 값으로 Google API이미 만든 자격 증명.

  • 응용 프로그램을 실행
  • 로그인을 클릭하십시오
  • ‘다른 섹션을 사용하여 로그인’섹션에 Google 버튼이 있습니다.
  • 구글 버튼을 클릭
  • 응용 프로그램은 사용자 이름과 암호를 입력하라는 메시지를 표시합니다
  • Gmail 사용자 이름과 비밀번호를 입력하고 로그인을 클릭하십시오.
  • 그러면 OAuth가 수행되고 응용 프로그램으로 돌아와 GmailID 를 등록하라는 메시지가 표시됩니다 .
  • 등록을 클릭하여 GmailID를 애플리케이션 데이터베이스 에 등록하십시오 .
  • 아이디 세부 정보가 맨 위에 일반 등록으로 표시됩니다
  • Gmail을 통해 로그 아웃 한 후 다시 로그인하십시오. 그러면 자동으로 앱에 로그인됩니다.

답변