Zitat von Abt
Zitat von Peter Bucher
- 2 Faktor Authorisierung konnte ich mit dem Microsoft Authenticator (QR gescannt) 4, 5 Versuche nach Eingabe des Codes nicht einrichten, es kam nur "ooops ein Fehler ist aufgetreten". Liegt das an mir oder ist das bekannt?
Danke, schau ich mir an.
Hab die dazugehörigen Exceptions in App Insights gefunden und behoben.
Super, danke dir Abt!
Hi Jungs
Mir sind zwei Dinge bei myCSharp.de aufgefallen:
Grüsse Peter
Hi
Danke für deinen Hinweis Abt. Ich habe dieses Link vom Deployment total übersehen.
Nach dem Beenden der App und löschen des GIT-Lockfiles im Deploymentordner auf Azure, klappte es. Nach 2, 3 Versuchen.
Hoffe das läuft jetzt. Jemand eine Ahnung wie es dazu kommen kann?
Gruss Peter
Hi Abt
Dieser Fehler kommt: git-index-lock-file-exists-when-i-try-to-commit-but-cannot-delete-the-file
Ich habe die Lock Datei gelöscht, aber der Fehler tritt wieder auf. Und ab und zu wird Timeout auf der Azure GUI angezeigt bei Logs laden.
Habe auch schon Anwendung beendet und neu gestartet. Half alles nichts. Auch KUDO hängt dann einfach fest. Hast du eine Idee?
Gruss Peter
Hallo
Wenn ich im Azure Portal ein Deployment von einem GIT Branch laufen lasse und dort ab jetzt nur noch "Fehler" | "Fetch from git@bitbucket.........
wo kann ich sehen, was das für ein Fehler ist? Dies trat gestern das erste Mal auf und heute genau dasselbe.
Habe mich auch nochmals bei bitbucket aus- und eingeloggt. Nützte nichts. Lokal läuft der Build in einen Ordner.
Gruss Peter
Hallo
Folgende URLs habe ich konfiguriert; ich frage mich, ob wirklich alle nötig sind. Und wenn nicht, warum nicht?
x.azurewebsites.net/.auth/login/aad/callback
x.azurewebsites.net/signin-oidc
x.azurewebsites.net/signout-oidc
Ich habe gehört es sei nur "x.azurewebsites.net/signin-oidc" nötig?
Danke und Gruss,
Peter
Danke für die Info Abt, das wusste ich alles nicht.
Wie ist das Linux Hosting von ASP.NET Core auf einem eigenen Server / Azure im Vergleich zum Hosting mit dem IIS?
Nehme an, da ist halt weniger managed, als wenn man eine AppService nimmt?
Performance? Kaltstart? Möglichkeit aufzuwärmen? Untertützung SQL Server auf Linux? Alternativen?
Will da möglichst alles rausholen.
Danke und Grüsse, Peter
Also, Auflösung:
Wenn die ASP.NET Core 5.0 SDK installiert wird, mit den Konsolen-Tools, dann funktioniert dotnet watch run für ASP.NET Core 3.1 Projekte nicht mehr. Es lässt sich nicht mehr einschränken und greift für alle Dateien, wenn es manuell aus der Konsole ohne Debug gestartet wird. Mit F5 (watch Setting) geht es. Aber das geht immer in Debug.
Mit ASP.NET Core 5.0 Projekten lässt es sich wieder konfigurieren und funktioniert, wie es soll.
Lösung für ASP.NET Core 3.1 Projekte, wenn das ASP.NET Core 5.0 SDK installiert wurde.
{
"sdk": {
"version": "3.1"
}
}
So wird beim Aufrufen der Konsole immer die .NET Core 3.1 SDK und Tools genutzt und alles läuft wie es soll. Exclude und Include für dotnet watch werden beachtet und die Default Settings für dotnet watch greifen auch.
Ich hoffe das hilft jemandem 🙂
Grüsse Peter
Hallo zusammen
Jetzt scheint es wieder zu laufen. Keine Ahnung was da das Problem war.
Gruss Peter
Hi Abt
Bin jetzt von B1 auf S1 bei Azure. Kostet jetzt irgendwas um 75CHF anstelle von 51 oder so.
Da seien auch Slots dabei. Ich probiere das mal. Von der Leistung her ist das sowieso besser.
Danke und Grüsse
Hi Abt
Top Antwort! Danke vielmals 🙂
Ja, habe Jobs bei AppStart gestartet und nach einigen Deployments waren es einfach zuviele laufende Jobs.
Jetzt läufts und ich schaue, dass ich Application Insight noch einrichten kann. Danke für die Info!
Vielleicht noch:
Deployment von ASP.NET Core auf Azure; wie am besten?
Ich habe natürlich GIT... und nutze im Moment WebDeploy, aber muss die App jedesmal manuell stoppen und starten,
damit es überhaupt geht.
Kannst du die Deployment Slot-Geschichte empfehlen? Ist es nicht so, dass das viel mehr kostet?
Grüsse Peter
Hallo zusammen
Ich habe eine ASP.NET Core 5.0 App mit Azure AD Auth und Hangfire auf Azure deployed. Wie schon im Titel beschrieben, läuft die App lokal super und lädt die Startseite in ca. 50ms. Auf Azure 5, bis zu 8 Sekunden. Bei jedem Request.
Wie kann ich hier dem Problem auf die Spur kommen?
Application Insight ist leider auf Azure noch nicht verfügbar für ASP.NET Core 5.0.
Grüsse Peter
Hallo zusammen
Habt ihr auch Probleme mit dotnet watch seit .NET Core 5.0? (Vorher war ich auf 3.1).
Mit dotnet watch run über die Konsole gestartet, wird KEINE Änderung mehr aufgenommen. Auch nicht die eingeschlossenen.
Wenn ich es über VS starte, werden ALLE Änderungen getriggert. Auch die ausgeschlossenen.
Verhalten hat sich geändert nach Installation der .NET Core 5.0 SDK.
Grüsse Peter
Hi Abt
Ja, dann ist ja alles gut und die Standard Implementation ist OK. War ein Missverständnis meinerseits.
Danke für deine Hilfe!
Grüsse Peter
Offensichtlich benötigen ALLE flows TokenID. So ein Witz, ich war total auf dem falschen Pferd. Dann ist ja alles gut?!
Hi Jungs
Links in Signaturen sollten in einem neuen Fenster / Tab aufgehen.
Müssen Poweruser wirklich so lange warten, bis sie den nächsten Beitrag schreiben dürfen? 🙂
Kommt super gut, das Forum!
Hehe Abt, das steht bei mir genau so drin im Code. Neustes Template. Denke du hast das nicht ohne Token getestet, oder wie lief dein Test?
Nimm mal bei Azure die ID Token raus, die es für implizit benötitgt, dann kommt ne Meldung...
Grüsse Peter
Hi Abt
Danke, ich schaue mir das an. Frage mich nur, wieso das MS nicht standarmässig ins Template einbaut.
Gruss Peter
Hallo zusammen
Jetzt habe ich - auch wegen der Azure AD Auth - angefangen von ASP.NET MVC auf ASP.NET Core 5.0 zu migrieren.
Denn unter ASP.NET MVC konnte ich keine Authentifizierung ohne impliziten Flow, hinkriegen.
Wie ich festellen musste, nutzt Microsoft in seinem eigenen Template auch den implicit Flow.
Was soll mir das jetzt genau sagen?
Abt hier aus dem Forum meinte, das sei unsicher. Wieso macht MS das und es nicht gleich richtig?
Grüsse Peter
Hi Abt
Alles klar, mache ich.
--
Also hier meine Lösung für ASP.NET Core 5.0, um dotnet watch auch für Bundles zu aktivieren.
BuildBundlerMinifier installieren:
Wenn dotnet watch genutzt wird, kann die Projektdatei wie folgt angepasst werden, damit dotnet watch neustartet,
dies tut der Bundler dann auch.
Dies ist auch bspw. für CSS oder für einzelne Dateien möglich.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*.js;$(DefaultExcludes)" />
</ItemGroup>
Viel Erfolg 🙂
Grüsse Peter
Hi Abt
Ich kann nicht mehr editieren. Ist die Einstellung doch nicht korrekt bei "Experten"?
Nachtrag: Wenn das Kommando "dotnet bundle" nicht gefunden wird, fehlt wohl noch was
=> dotnet-bundle-not-working-in-net-core-mvc-application
Gruss Peter
Hi Abt
Das rennt tatsätchlich wie es soll. Die Einstellung die ich gesucht habe, war wirklich die URLs von ENV und launchBrowser. Vielen Dank!
"MeinProjektName": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001"
}
}
Und rufe
dotnet watch run --no-launch-profile
auf; es geht kein Fenster auf 🙂
edit: Die Code Hervorhebung ist cool hier im Forum!
Grüsse
Hi Abt
Folgendes sollte gehen: Bundling And Minifying In ASP.NET Core Applications
Precompile => dotnet bundle watch (Steht ein wenig weiter unten im Artikel.
Grüsse Peter
Hmm Abt, vor dem Build ist nach dem Build oder?
D.h. bevor der Build startet, bzw. eben auch wenn er neustartet, würde es Sinn machen.
Es gibt also ausser gulp keine Möglichkeit, direkt live zu entwickeln out-of-the-box in 5.0. Wow.
Ich müsste mich übel täuschen; dachte das ging eine zeitlang in 3.1 problemlos.
Wie machst du denn das? Jedesmal manuell anstossen offenbar, oder mit gulp?
JS, CSS....?
Grüsse Peter
Hi Abt
Ja, wenn ich dotnet watch in der Konsole per .bat aufrufe, kommt ein Fenster. Muss also an was anderem liegen. Aber gut weiss ich jetzt, wie ich die URLs konfigurieren kann. Danke dir.
Wegen den Bundles: Ist es also so, dass das was ich in PreBuild aufnehme, ausgeführt wird, wenn dotnet watch am
rennen und dann eben neustarten ist. Weil er ja dann einen Rebuild macht, korrekt?
Sollte ja auch mit den dotnet Standard bundle Tools gehen. Dieses Weboptimizer ist ja neu jetzt.
Grüsse Peter
Hi Abt
Vielen vielen Dank! Wenn das klappt, erleichtert das schon einiges.
Mit ASP.NET Core 3.1 mit den gleichen launch.settings ging kein Fenster auf, darum dachte ich, es hätte keinen Zusammenhang. Denke aber es liegt an den dotnet.... Standardeinstellungen die sich mit 5.0 geändert haben.
Ich gucke mir das an und hoffe das klappt auch, wenn ich es von der Konsole aus starte.
Wie ist das eigentlich mit dotnet bundle start, wenn ich das als zweiten punkt in einer .bat file drin habe (nach einem dotnet watch start Aufruf), wird das ja nicht ausgeführt, gibt es da eine Möglichkeit?
Sodass die Bundles auch automatisch "gewatched" werden?
Mit 3.1 hat das eine Zeit lang funktioniert, mit dem nuget-Package - aber jetzt auch nicht mehr zuverlässig.
Ich starte halt gerne eine .bat file, wo ich dann mit CTR+C wieder beenden oder neu starten kann, wenns mal hängt und den Status sehe.
Habe nicht gerne VS immer im Debugmodus, sondern hänge die Instanz an, wenn ich debuggen möchte.
Grüsse Peter
Hallo zusammen
Ist super geworden!
Könnte man den Button zum erstellen eines Themas sichtbarer machen, evtl. blau wie hier bei "Antwort erstellen"?
Ich habe den Button fast nicht gefunden 😕
Vielen Dank für euer Engangement!
Grüsse Peter
Hallo zusammen
Wenn ich ein neues ASP.NET 5 Projekt erstelle und dies per dotnet watch run starte, öffnet sich ein http :5000 und ein https:5001 Fenster. Ich möchte aber kein oder nur das https Fenster geöffnet haben.
Leider fand ich nicht wirklich passende Argumente und finde nicht, wo das konfiguriert werden kann.
watch : Started
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
Mit ASP.NET Core 3.1 war das Verhalten noch anders.
Grüsse Peter
Hallo witte
... das wird wohl eine binäre Datei sein. Vllt überträgst du ein Bild und hast den Mimetype nicht gesetzt.
Ähm - woher weisst du dass das eine Fehlermeldung sein soll?
Weil immer so ein Salat kommt, anstelle der Fehlermeldung. Und wenn ich debugge, sehe ich die Fehlermeldung oder im Razer im Designer. Und zwar egal auf welcher Url. Also muss die Ausgabe der Fehlerseite irgendwie durch eine Komponente kaputt gemacht worden sein.
Wo müsste man da ansetzen?
Grüsse
Hallo zusammen
Seite einiger Zeit bekomme ich statt aussagekräftigen Fehlermeldungen folgendes Bild im Browser, wenn ein Fehler vorhanden ist. Schwierig, die Fehler so zu finden.
Mit was könnte das zusammenhängen?
Grüsse Peter
Hallo zusammen
Implicit Flow funktioniert. Wie ist es denn da bezüglich Security?
Es sei nicht für serverseitige Anwendungen gedacht, etc.
Für Policies / Claims in ASP.NET MVC (.NET Framework) könnte das hier nützlich sein:
Hallo Abt
Ja... das ist mir wirklich klar. Nur habe ich keine Zeit, das komplett selber zu entwickeln und auf das läuft es hinaus, falls es da keine Beispiele gibt.
In ASP.NET Core ist alles gekapselt, ganz anders. Wie soll mir das was bringen?
Jemand eine Idee?
Hi Papst
Danke für deine Info.
Woher hast du die Vorlage genommen für ASP.NET Core für den CodeFlow?
Nutzt du eben dieses Identity.Web Dings, das ganz neue, dass in Abts neustem Link mit Beispielen auch genutzt wird?
Klar komme ich da keinen Meter weiter.
@Abt
Dir war schon bewusst, dass es hier um ASP.NET MVC (NICHT Core) geht?
Ich frage mich jetzt einfach mal, ob das überhaupt geht.... hast du - oder hat jemand ein Beispiel dafür? Muss es doch geben. Kann man sich doch nicht aus den Fingern saugen.
Hi Abt
Im Code ein paar Beiträge weiter oben ist - wie beschrieben - bei:
string signedInUserID = context.AuthenticationTicket
...AuthenticationTicket null.
Was ist denn das für eine Url, die du mir geschrieben hast?
Das verwirrrt mich mehr, als das es mir hilft, um ehrlich zu sein.
Auch deine gezeigten Beispiele sind für ASP.NET Core und die genutzte Bibliothek scheint nur für ASP.NET Core zu sein?
Ich habe bei Azure gesehen, dass man eine Testapplikation generieren lassen kann.
Wäre ja alles schön un gut, nur geht das nur mit IMPCIT GRANT. Da frage ich mich schon, ob das CodeFlow überhaupt geht und warum es dafür keine Beispiele gibt? Ist nicht Microsoft typisch. Weisst du da mehr?
Siehe Bild.
Hallo Papst, Abt
Wenn ich auf .Code setze, springt er in die Authorisierungsmethode rein; Er kommt schon weiter und fragt nach Berechtigung des Profiles. Es ist dann aber context.AuthenticationTicket null.
Du kannst auch alles erst mal mit Hilfe von Postman versuchen hin zu bekommen, damit Du Dir sicher sein kannst, dass das AAD richtig konfiguriert ist - und Du gegen die richtigen Endpunkte arbeitest.
Keinen Plan was genau du damit meinst. Ich muss wohl nicht händisch Requests prüfen?
Code brauche ich ja nicht mehr als in etwa dem bestehenden Umfang. Schon verwirrend, diese Sache.
Aktuelle Azure Samples sind zB hier, falls es Dir weiter hilft:
>
Woher hast du diese Url? Scheint für ASP.NET Core zu sein; sollte ja trotzdem anwendbar sein. Nur ist es wieder mal mit IMPLICIT GRANT. Das hatte ich ja schon am laufen, möchte ich aber nicht.
Die Beispiele bringen mich nicht weiter. Ich verstehe immer nur weniger.
Mal schauen, ob ich mit dem Tipp vom Papst 😉 weiterkomme...
Hallo Abt
Ja schon gehört. Ist mir aber alles nicht wirklich hilfreich, um ehrlich zu sein.
Folgend ist mein aktueller Code der Startup.cs. Ich habe ihn dem Projekt Template von VS angepasst. So wie ich das verstehe, soll das jetzt Code Auth Flow sein.
Es kommt aber immer noch die genau gleiche Meldung, dass er id_token, etc... für implicit aktiviert haben will.
Und in "AuthorizationCodeReceived" springt er auch nicht.
Wieso ist denn das so?
Der Fehler der immer noch kommt, ist: https://login.microsoftonline.com/error?code=700054
public void Configuration(IAppBuilder app)
{
string clientId = WebConfigurationManager.AppSettings["ClientId"];
string authority = "https://login.microsoftonline.com/" + WebConfigurationManager.AppSettings["Tenant"] + "/v2.0";
string appKey = WebConfigurationManager.AppSettings["ClientSecret"];
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// Sets the ClientId, authority, RedirectUri as obtained from web.config
ClientId = clientId,
Authority = authority,
RedirectUri = WebConfigurationManager.AppSettings["RedirectUri"],
// PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it is using the home page
PostLogoutRedirectUri = WebConfigurationManager.AppSettings["RedirectUri"],
//Scope = OpenIdConnectScope.OpenIdProfile,
// ResponseType is set to request the id_token - which contains basic information about the signed-in user
//ResponseType = OpenIdConnectResponseType.IdToken,
// ValidateIssuer set to false to allow personal and work accounts from any organization to sign in to your application
// To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name
// To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false // Simplification (see note below)
},
// OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to OnAuthenticationFailed method
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
// If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
AuthorizationCodeReceived = (context) =>
{
var code = context.Code;
ClientCredential credential = new ClientCredential(clientId, appKey);
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
AuthenticationContext authContext = new AuthenticationContext(authority, null);
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCodeAsync(
code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId).Result;
return Task.FromResult(0);
}
}
}
);
}
private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> arg)
{
throw new NotImplementedException();
}
Grüsse
Hallo JimStark
Das Entiyframework ist mit SQLite extrem eingeschränkt, sobald du das Schema ändern möchtest, ist vorbei. Du kannst nur Felder hinzufügen, aber nichts ändern.
Daher SQLServer - auch wegen der Performance wenns grösser wird.
Grüsse
Hi Abt
Das ist doch mal ein Wort. Dann richte ich mich an Authorization Flow, dankeschön! 😃
Grüsse
Ich glaube witte meint damit, dass es nicht mehr reine Polymorphie ist.
Hallo CombatKarl
dynamic oder Dictionary<string, object>. Ist aber meistens ein Zeichen, dass da was falsch angegangen wird. Nummeriert Variabeln, wieso? Nutze Arrays oder Listen.
Grüsse
Hallo Abt
So, jetzt bin ich einen Schritt weiter. Die API greift.
Darf ich ohne Probleme den implicitFlow verwenden, wo man die id_token in Azure aktivieren muss?
Siehe:
Scheint ja für Webanwendungen zu sein, oder Mobileanwendungen. Aber da es ja eine externe Auth / Author ist, müsste das passen, oder?
Doch nicht:
If you are developing a Web application that includes a backend, and consuming an API from its backend code, the implicit flow is also not a good fit. Other grants give you far more power. For example, the OAuth2 client credentials grant provides the ability to obtain tokens that reflect the permissions assigned to the application itself, as opposed to user delegations. This means the client has the ability to maintain programmatic access to resources even when a user is not actively engaged in a session, and so on. Not only that, but such grants give higher security guarantees. For instance, access tokens never transit through the user browser, they don't risk being saved in the browser history, and so on. The client application can also perform strong authentication when requesting a token.
Oh jesses 😁
Grüsse
Hi Abt
Alle Callback-URLs (auch Redirect) müssen korrekt (auch mit zusätzlichem Slash) konfiguriert werden.
Sorry, das habe ich wohl übersehen. Ich schaue mal, ob der zusätzliche Slash da ist! 😃
Danke und Grüsse
Hi Abt
Danke für deine Ausführungen!
Callbacks sind Post, Redirect nicht.
Trotzdem muss in der App Registration auch der Redirect korrekt hinterlegt sein.In
> ist der Redirect laut Web.config einfach auf die Root-Url.Die Callback-Implementierung ist Teil der Middleware und muss nicht selbst implementiert werden.
Ja mir ist dieser Unterschied schon geläufig, nur heisst es in der Doku "RedirectUri" und auch die Beschreibung hört sich überhaupt nicht nach einem Callback an. Die RedirectUri ist 1:1 eingestellt in Azure. Auch die Root Url. Ich nehme an da funkt sonst noch was dazwischen, sodass es die Route nicht findet 😦.
Danke für den Tipp, dass Callback direkt an die interne API geht. Ich sondere mal aus.
Grüsse
Hallo Abt
Ah, Post Redirect haha. Ganz was neues.
Ich habe nirgendwo was von einer Post-CallBack Url gelesen bezüglich Identity. Wo finde ich denn diese Infos? Scheinbar bin blind.
Identity ist der Nachfolger von Membership. Und Owin ist für die Authentifizierung Server/Client.
Aber da gibt es scheinbar Token based (für Apps) und nicht Token based?
So richtig schön übersichtlich ist das also überhaupt nicht.
Im Beispiel finde ich keine Route, die für einen "Post Redirect" genutzt wird.
Grüsse
Hallo Abt
Habe jetzt Owin (Identity) eingebaut nach der Anleitung, die securityGroups weitergeleitet und alles konfiguriert. Kann jetzt bei Microsoft auf meinen Benutzer klicken, aber nachher will er zurück auf meine Seite und bringt einen 404.
Folgendes ist die RedirectUri die überall drinsteht:
<add key="RedirectUri" value="https://localhost/dashboard"/>
Hier die Login Actionmethode:
[HttpGet]
public ActionResult Login(string ReturnUrl = "")
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "https://localhost/dashboard" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
Und er bringt einen 404. Wenn ich auf F5 klicke, will er noch einmal einen POST absetzen. Ich frage mich gerade, wo das Problem liegt? Bei localhost?
Fehlermeldung:
Angeforderter URL: /dashboard
Danke und Grüsse
Peter
Hallo
Gute Info zu Group-Weiterleitung:
Grüsse Peter
Hi Abt
Danke für die Info!
Grüsse
Hi Jim
Hier noch ein wenig Grundlagenwissen dazu:
@Abt
Der Tipp bezüglich des Materialisierens einer Menge ist wichtig 😃
Grüsse
Danke Abt. Als "accepted" kam, kam das Mail an. Es wird nur von einem Hintergrundprozess nicht mehr geschickt, da der Hintergrundprozess ein falsches Ergebnis liefert. Also ein anderes, als ich erwarte.
Das ist ein if 😃
Also alles gut. Die Domain musste ich nie validieren für SendGrid. Muss man das?
Grüsse