previous arrowprevious arrow
next arrownext arrow
PlayPause
previous arrownext arrow
Shadow

Wir realisieren Ihre CAD-Projekte

im AutoCAD, Inventor, Revit und Autodesk Forge Platform

Umfeld
Wir helfen Ihnen bei der Realisierung Ihrer Projekte.

Blog - CAD-Becker.de

Beiträge zu AutoCAD und dessen Vertikalprodukte.
Tipps und Tricks, viele Neuigkeiten aus der Autodesk Welt.
4 Minuten Lesezeit (771 Worte)
Empfohlen 

Autodesk Forge - 3-legged Authentifizierung

​Möchte man mit Forge arbeiten, muss das Authentifizieren des Users verstanden werden. Ich gebe es zu: Ich habe es mir sehr schwer damit gemacht.

Klassenname​ Vererbung​
Authorize​ Keine​
ThreeLeggedApi​Autodesk.Forge.ThreeLeggedApi

Fügen Sie bitte über NuGet folgendes Paket ein:

Autodesk.Forge

Damit wird automatisch RestSharp und Newtonsoft.Json in der aktuellen Version mit eingefügt. Stellen Sie sicher, dass alle Projekte Ihrer Applikation, die mit Forge arbeiten sollen, über diese Verweise verfügen.

Wir benötigen zwei Klassen im Namespace [Company].Forge.Secruity (siehe nebenstehende Tabelle).

Benötigte usings:

System.Collections.Generic
System.Diagnostic
Newtonsoft.Json
Newtonsoft.Json.Linq
Autodesk.Forge
RestSharp

​Die statische Klasse Authorize beinhaltet alle Methoden, die zur Autorisierung notwendig sind. Kommuniziert allerdings nicht direkt mit Forge, das übernehmen andere Klassen, z.B. die Klasse ThreeLeggedApi.

using Autodesk.Forge;
using RestSharp;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace CP.Forge.Security
{
    public static class Authorize
    {


    }
} 
Die Klasse ThreeLeggedApi übernimmt die Kommunikation mit Forge während der Autorisierung.

Sie erbt von Autodesk.Forge.ThreeLeggedApi. Ich nutze nicht die Originalmethoden aus Autodesk.Forge, da mir die Übergabeparameter nicht ausreichen und ich den Reponse aus Autodesk.Forge aufbereiten möchte, um sie in meiner Applikation besser verarbeiten zu können.​

using Autodesk.Forge;
using RestSharp;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace CP.Forge.Security
{
    public class ThreeLeggedApi : 
        Autodesk.Forge.ThreeLeggedApi, 
        Autodesk.Forge.IThreeLeggedApi, 
        IApiAccessor
    {

        public ThreeLeggedApi() : base()
        {
            Initialize();
        }

        private void Initialize()
        {

        }

        public new string Authorize()
        {

        }
    }
} 

Mein Formular beinhaltet ein Menü mit dem der User sich anmelden kann. Dieses Menü ruft ein Item_Click Event auf.

In dieser Methode setze ich einen Autorizierungs-Staus als JObject zusammen. Dieses Objekt beinhaltet eine neue GUID, das Datum im UTC-Format (wichtig, da weltweiter Einsatz vorgesehen ist), die Untrnehmes-ID und der Name des Unternehmens.

Die Methode Get3LeggedToken erstellt eine URL zum Aufruf im Internet-Browser. Über diese URL meldet der User sich an.


private async void bar3LeggedAuthorize_ItemClick(object sender, ItemClickEventArgs e)
{
    string m_URL = string.Empty;

    JObject m_AuthorizeState =
        new JObject(
            new JProperty("State",
                new JObject(
                    new JProperty("ID", System.Guid.NewGuid().ToString()),
                    new JProperty("Date", DateTime.UtcNow.ToString()),
                    new JProperty("Company", CP.Forge.Utilities.Credentials.CompanyAccountID.ToString()),
                    new JProperty("CompanyName", "Claudius Peters")
                    )));

    m_URL = CP.Forge.Security.Authorize.Get3LeggedToken(m_AuthorizeState.ToString(), out m_URL);
    if (m_URL.Length > 0)
    {
        using (var process = new System.Diagnostics.Process())
        {
            process.StartInfo.FileName = "iexplore.exe";
            process.StartInfo.Arguments = m_URL;

            await process.RunAsync();
        }

        CP.Forge.Security.CodeState m_CodeState = 
            await CP.Forge.Security.Authorize.Get3LeggedAuthorizeCode(m_AuthorizeState, 30);

        if (m_CodeState != null)
        {
            m_AccessToken = m_CodeState.AccessToken;
            switch (m_AccessToken.Status)
            {
                case System.Net.HttpStatusCode.OK:
                    OnAuthorized?.Invoke(true, Utilities.Constants.AuthorizeApp.BIM360);
                    break;
                default:
                    OnAuthorized?.Invoke(false, Utilities.Constants.AuthorizeApp.None);
                    break;
            }
        }
    }

} 

 Der Aufruf des Internet-Browser geschieht asynchron, damit die Applikation auf den Abschluss der Anmeldung wartet. Aus diesem Grund wird die Eventmethode Item_Click asynchron aufgerufen.

Ist die Anmeldung erfolgreich, ruft Forge die vorher in Ihrer Forge-App definierte Callback-URL auf.

Die Methode Get3LeggedToken macht den ersten Schritt, den ich in meinem Posting beschrieben habe.

public static string Get3LeggedToken(string State, out string URL)
{
    string m_URL = string.Empty;
    try
    {
        Autodesk.Forge.Scope[] scopes = 
            new Autodesk.Forge.Scope[]
        {
            Autodesk.Forge.Scope.DataRead,
            Autodesk.Forge.Scope.DataWrite,
            Autodesk.Forge.Scope.BucketCreate,
            Autodesk.Forge.Scope.BucketRead
        };
        CP.Forge.Security.ThreeLeggedApi m_ThreeLeggedApi = 
                new ThreeLeggedApi();
        m_URL = m_ThreeLeggedApi.Authorize(
            CP.Forge.Utilities.Credentials.ClientID,
             oAuthConstants.CODE,
             CP.Forge.Utilities.Credentials.CallBackUrl,
             scopes, State);
    }
    catch (Exception e)
    {

    }
    finally
    {

    }
    URL = m_URL;
    return m_URL;
} 

Die Autorisierung erfolgt in der Methode Authorize in der Klasse ThreeLeggedApi. Sie wird neu definiert, damit die originale Methode aus Autodesk.Forge.ThreeLeggedApi nicht genutzt wird.

Sie erstellt die URL, die der Internet-Browser zum Anmelden aufrufen soll.

public new string Authorize(
    string ClientId, 
    string ResponseType, 
    string RedirectUri, 
    Autodesk.Forge.Scope[] scope = null, 
    string state = null)
{

    string resource = "/authentication/v1/authorize";
    Dictionary<string, string> dictionary = new Dictionary<string, string>();
    if (ClientId != null)
    {
        dictionary.Add("client_id", this.Configuration.ApiClient.ParameterToString((object)ClientId));
    }

    if (ResponseType != null)
    {
        dictionary.Add("response_type", this.Configuration.ApiClient.ParameterToString((object)ResponseType));
    }
    if (RedirectUri != null)
    {
        dictionary.Add("redirect_uri", this.Configuration.ApiClient.ParameterToString((object)RedirectUri));
    }

    if (scope != null)
    {
        dictionary.Add(nameof(scope), this.Configuration.ApiClient.ParameterToString((object)scope.AsString<Autodesk.Forge.Scope>()));
    }
    
    if (state != null)
    {
        dictionary.Add(nameof(state), this.Configuration.ApiClient.ParameterToString((object)state));
    }

    int num = 0;
    RestSharp.RestRequest restRequest = new RestSharp.RestRequest(resource, (Method)num);
    foreach (KeyValuePair<string, string> keyValuePair in dictionary)
        restRequest.AddParameter(keyValuePair.Key, (object)keyValuePair.Value);
    return this.Configuration.ApiClient.RestClient.BuildUri((RestSharp.IRestRequest)restRequest).AbsoluteUri;
} 

Der abschließende Schritt, beschrieben im obigen Posting, folgt in den nächsten Tagen. 

Visual Lisp to C# - Eine Einführung, hier Variable...
Autodesk: Was ist "Generative Design"?

Ähnliche Beiträge

 

By accepting you will be accessing a service provided by a third-party external to https://cad-becker.de/

Über mich

  Dipl.-Ing.
Jürgen A. Becker
Versorgungstechnik

 

 

Suchen

Abonniere Blog

Kalender

Warte kurz, während wir den Kalender laden

Tag-Cloud

BAK E-Auto Design Automation API Produktschlüssel SELECTIONOFFSCREEN Zoom Youtube Whitepaper Layerdialog Returntaste Niedaks DPI Skaling byLayer Speicherort Netzwerk 2-legged Umschalttaste Datentypen Farbbücher License DevCon HSM NWG einfügen Forge cURL Recruiter Kabelrinne 3D PDF Objekte wählen Kabeltragsystem Scheinselbstständigkeit Flüchtling Objekte isolieren Profil Transparenz BIM Forge DevCon OSMODE Kobalt Netzwerk Lizenz Deklaration Interview Fusion 360 WHIPTHREAD Hololens Microsoft Surface Book Richtung umkehren Schriftfeld RevWolke Werkzeugpalette Abhängigkeiten AWS Revisionswolke Volvo Ocean Race PUK Externe Referenz Rechtsklick Personaldienstleister AutoCAD Objektmodell Performance löschen OFang Autorisierung VLAX Hochgestellte Zahl Überschreibung AutoCAD 2019 RestSharp BIM 360 API europäische Datenschutz Richtlinie Request bewegen Image Shift Taste Einheiten Visual Lisp Microsoft SecureLoad https Powerpointfolien Optionen ServicePack Hotfix Skalierung eTransmit angenommener Schnittpunkt Batterie Return Befehls Übersetzung Erhebung Plotstiltabellen Umgrenzung Temporäre Dateien Speichern Beziehungen CAD-Becker Kopieren fehlgeschalgen Surface Vorlagen Ford Befehlsübersetzung vlax-ldata-get Fusion Flexlm Harp Excel Externe Regeln Vlax-ldata Timeout CAD-Becker.de Laden Client-ID Casting Surface Pro 4 Attribut Transformation Suchen Einbetten Plotstil History Autodesk Gallery Datei anhängen Texthöhe Sicherungsdatei Datensicherheit .Net OSNAP Objekte zoomen Zeichnungen verschicken Navisworks Sicherheit gefüllte Flächen Vorlage SV$ Attribut hinzufügen assoc Freedom Taschenrechner Seenotrettung Gummiband Linie Save folder Referenz Claudius Peters XRef Farbbuch Command Definition Barcode Plotten 3D-Druck Indiara SFair Wiederherstellen SetByLayer Inventor Koordinationsmodell Layer Zwischenablage Layout Lynn Allen 3-legged Beschriftungsmaßstäbe Industrie 4.0 Variable shift NWD Schulung 3-Legged Autorizierung Plot Maßstab Hardwarebeschleunigung Elektromobilität Linienstärke iLogic Solid Revisionswolken Fehlerbericht Docking Generative Design OOPS Autodesk Forge Brennstoffzelle Autodesk Enter Wipeout AutoCAD Update Bereinigen Autodesk CAM ObjectARX .net unbenannte Objekte leere Texte Ultra HD Microsoft Surface Pro 4 Strom Geschwindigkeit Text einrahmen refenziert sich selbst Pantone Ansichtsfenster Befehlshistory See Watch Zurückgeben HSMWORKS AU Cloud Accelerator Höhekote Schraubverbindung Update 2018 Layer Überschreibung http Mitte zwischen zwei Punkte Anmeldung Drehen MoveBak Objektfang Befehls Definition Anischtfenster Appload Views Neu erstellen Auflösung Lizenz Server Richtung Zeichnungs Name Cloud Rechtsklickanpassung Webservice Naviswork HTTP-Request externe Referenz Lizenz Schöne Zeichnung Objekteigenschaft E-Mobilität Befehl AutoCAD LT Sonderzeichen Borrowlicense Punktwolke Entertaste fremde Zeichnung Rechnen OBO-Bettermann external rules Block Listen MAXACTVP Maßstab Rechte Maustaste Text Parameter Objektwahl Darmstadt Zuschneiden Online-Seminar Oscar RAL Personal Dienstleister DText NWD anhängen vonLayer Hybrid Architektur Video MText Update AC$ Bezug Viren Schnittpunkt Layer frieren Architekten Autodesk Fusion 360 Entleihen Volvo Objekte erstellen Linientypfaktor OAuth Vlax-ldata-list Viewer Kabeltrasse Umwelt Lisp 2018 BIM 360 Schraffur QRCode Hohe Auflösung Command Öffnen Lisp ruft C# auf Sichtbarkeit Schicken wir ein Schiff Autoriserung STRG Linientyp temporäre Dateien Surface Pro4 Objektfang Einstellung vlax-ldata-put Maya Petition XREF internationaler Befehlssatz Internationaler Befehlssatz defekte Zeichung Einfügen Surface Book C# AutoCAD Design Center Plot-Maßstab Vererbung Datenverknüpfung Beschriftungsmaßstab Bemaßung Plot Security Netload Benutzeroberfläche CAD Schrift SSL-Zertifizierung .Net Core Pointcloud Rechner ViewCube Übersetzung cURL nach C# Cloud Act TrustedPath Varia Eigenschaft Bereinig Schnellzugriffs-Werkzeugkasten Genertive Design Recycling Wasserstoff

Kontakt

Jürgen A. Becker

CAD-Becker.de
Detmolder Str. 786
33699 Bielefeld
Germany
Telefon
+49 (5202) 9953808 
Mobil
+49 170 870 8679
E-Mail
Juergen.Becker(at)CAD-Becker.de

Menu-de