previous arrowprevious arrow
next arrownext arrow
PlayPause
ArrowArrow
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

 

Über mich

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

 

Suchen

Kalender

Warte kurz, während wir den Kalender laden

Tag-Cloud

Fusion Lisp Layer Überschreibung fremde Zeichnung Autoriserung Volvo Rechtsklickanpassung Autodesk Forge Objekte zoomen BAK DText Architekten Ansichtsfenster Layer SELECTIONOFFSCREEN Autorisierung Plot Maßstab Zoom Befehlsübersetzung Variable Sicherheit Attribut Darmstadt Update 2018 Cloud Accelerator Ford AutoCAD LT Maya AU Solid Neu erstellen Richtung Objektwahl vonLayer Viren PDF Sonderzeichen löschen leere Texte angenommener Schnittpunkt Linientypfaktor Sichtbarkeit Online-Seminar Hotfix VLAX Produktschlüssel Surface Pro 4 Fehlerbericht Layer frieren Kabeltragsystem Layout Forge DevCon MAXACTVP Fusion 360 Rechnen OOPS Zeichnungen verschicken Revisionswolken Microsoft Suchen 3-legged Skalierung Datentypen Befehls Übersetzung refenziert sich selbst Design Automation API Rechte Maustaste ViewCube Auflösung Umschalttaste Autodesk Gallery Performance 2-legged Personaldienstleister Vorlagen Plotten Video Youtube HTTP-Request Umgrenzung MoveBak Objektfang Einstellung Schraffur 3D-Druck Request Hardwarebeschleunigung Shift Taste Bereinigen Hololens Kabelrinne Surface Pro4 Zwischenablage Hochgestellte Zahl Schulung Industrie 4.0 Webservice Hohe Auflösung Lizenz Server Text Powerpointfolien SV$ .Net Core Views Datensicherheit Revisionswolke Anischtfenster eTransmit Plotstiltabellen Inventor http 2018 OSNAP Varia Überschreibung Plotstil Image BIM 360 CAD-Becker.de Ultra HD Profil SetByLayer Beschriftungsmaßstab Design Center Lynn Allen temporäre Dateien Transparenz Personal Dienstleister XRef gefüllte Flächen Generative Design ServicePack Volvo Ocean Race Anmeldung Schöne Zeichnung Plot Drehen Erhebung Docking Block Vorlage Recruiter Externe Referenz Gummiband Linie QRCode Internationaler Befehlssatz Taschenrechner byLayer History Schrift Genertive Design Viewer Surface Book Surface Claudius Peters Rechtsklick Returntaste OAuth Excel AC$ Whitepaper Autodesk Fusion 360 PUK Attribut hinzufügen XREF Objekte wählen Speichern internationaler Befehlssatz Werkzeugpalette Update Datenverknüpfung Bezug Rechner unbenannte Objekte Texthöhe DevCon Übersetzung cURL nach C# https Bereinig OSMODE BIM 360 API cURL Microsoft Surface Book OFang SSL-Zertifizierung 3D C# STRG Plot-Maßstab Einfügen Optionen TrustedPath externe Referenz AutoCAD Maßstab defekte Zeichung DPI Skaling Mitte zwischen zwei Punkte Geschwindigkeit shift Punktwolke Wiederherstellen RestSharp Bemaßung Text einrahmen Kabeltrasse Beschriftungsmaßstäbe Visual Lisp CAD Security WHIPTHREAD 3-Legged Autorizierung Eigenschaft europäische Datenschutz Richtlinie Objekte isolieren Wipeout Kopieren fehlgeschalgen Schnittpunkt Enter Interview OBO-Bettermann Schriftfeld Objektfang Zeichnungs Name Deklaration Entertaste Sicherungsdatei RevWolke AutoCAD 2019 Temporäre Dateien Cloud Befehlshistory Autodesk Scheinselbstständigkeit bewegen Lizenz Layerdialog Return Microsoft Surface Pro 4 Forge Oscar Barcode Linientyp AutoCAD Update Netzwerk Lizenz Linienstärke Öffnen Niedaks Hybrid Architektur Netzwerk Vererbung Höhekote CAD-Becker Objekteigenschaft MText SecureLoad Richtung umkehren

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