Najpierw naszkicuję mój projekt:
Podczas mojego stażu muszę dodać funkcjonalność do istniejącego systemu. Klient zewnętrzny musi mieć dostęp do danych z AX Webservices po autoryzacji przez użytkownika przez OAuth2. Rozumiem, że muszę utworzyć „usługę sieciową proxy”, w której klient może wykonywać swoje połączenia i która wywołuje usługi AX, ale nie jestem pewien co do części OAuth2. Większość samouczków i przewodników dotyczy korzystania z tożsamości ASP.NET dla logowania w serwisie Facebook lub Google. Nie potrzebuję tego, muszę użyć istniejących poświadczeń, więc muszę stworzyć własną usługę OAuth2.
Trudno jest znaleźć samouczki, przewodniki lub wyjaśnienia na ten temat. Rozumiem OAuth2 i rozumiem, co należy zrobić, ale nigdy wcześniej czegoś takiego nie robiłem i trudno jest mi zacząć. Najbliższą rzeczą, której potrzebuję, jest ten link repozytorium github , ale rozwiązanie się nie kompiluje.
Miałem na myśli stworzenie strony ASP.NET MVC, w której klienci (osoby trzecie) mogą się zarejestrować i uzyskać swoje ID klienta. Dzięki ASP.NET API chciałem stworzyć API, które pobierze wymagane tokeny i parametry, a następnie uzyska dostęp do usług Dyn AX.
Czy to prawda, czy całkowicie się mylę? Każda pomoc lub linki dotyczące budowania własnego serwera / usługi oauth2 byłyby miłe.
Odpowiedzi:
Jest świetny post na blogu Taiseer Joudeh ze szczegółowym opisem krok po kroku.
źródło
Authentication
. Mogę zrobić wszystko, co chcę, na przykład dostać / opublikować / umieścić / usunąć.Miałem również problem ze znalezieniem artykułów o tym, jak po prostu wygenerować część tokena. Nigdy takiego nie znalazłem i nie napisałem własnego. Więc jeśli to pomoże:
Rzeczy do zrobienia to:
Microsoft.Owin
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Security.OAuth
Microsoft.AspNet.Identity.Owin
startup
klasę OWINNastępnie utwórz plik HTML i JavaScript (
index.js
) z następującą zawartością: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
Klasa OWIN powinna mieć następującą zawartość: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); } } }
Uruchom swój projekt. Token powinien zostać wyświetlony w wyskakującym okienku.
źródło
Microsoft ASP.NET Identity Owin
wchodzi w grę? Czy używasz ASP.NET Identity do uwierzytelniania użytkowników? Jeśli nie, czy ten pakiet NuGet jest nadal potrzebny?app.UseOAuthBearerTokens(OAuthOptions);
nie będzie działać bezMicrosoft ASP.NET Identity Owin
. Nie rozpoznaje metodyUseOAuthBearerTokens
.Badam to samo i natknąłem się na serwer tożsamości, który implementuje OAuth i OpenID na szczycie ASP.NET. Integruje się z tożsamością ASP.NET i ponownym uruchomieniem członkostwa z obsługą trwałości dla Entity Framework.
Tak więc, aby odpowiedzieć na swoje pytanie, zapoznaj się ze szczegółowym dokumentem na temat konfiguracji serwera OAuth i OpenID .
źródło
Gmail: OAuth
Client ID
iSecret ID
. Na koniec kliknij OK, aby zamknąć wyskakujące okienko poświadczeń.Google API
. Kliknij Przegląd w lewym okienku.Google API
sekcję pod Social APIs.To wszystko od strony Google.
Wróć do swojej aplikacji, otwórz
App_start/Startup.Auth.cs
i odkomentuj następujący fragmentapp.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = "", ClientSecret = "" });
Zaktualizuj
ClientId
iClientSecret
wartościami zGoogle API
poświadczeń, które już utworzyłeś.Gmail
identyfikatora.Gmail
identyfikator w bazie danych aplikacji.źródło
Why punish that effort?
Być może SO potrzebuje sposobu na oznaczenie odpowiedzi jako niewłaściwie dopasowanej do pytania PO. Lub pozwolić użytkownikom na sugerowanie przeniesienia go do bardziej odpowiedniego pytania ... lub utworzenie nowego pytania na podstawie odpowiedzi.