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

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

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