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

 

Google Translator

 

Suchen

Abonniere Blog

Kalender

Warte kurz, während wir den Kalender laden

Tag-Cloud

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

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