Delphi 10.4 -Es geht um eine
ISAPI DLL und OAuth2.0
Hallo
Ich bekomme nach einer Microsoft-Anmeldung via Redirect-
Url Parameter .. diese sende ich dann an Microsoft um einen Token zu bekommen damit ich die Mailadresse des Users auslesen kann..
Code:
http := TNetHTTPClient.Create( Self );
.....
Lresponse := http.post( 'https://login.microsoftonline.com/organizations/oauth2/v2.0/token', params );
Das funktioniert bei mir auf einen Win10-Stand Anlone PC mit IIS und selbsterzeugten Zertifikat
einwandfrei
Aber auf einem Server (in einer Domain) mit IIS 2022
NICHT (Selbst erzeugtes Zertifikat der Organisation) ...
Dort bekomme ich immer den Fehler "Fehler beim Abrufen des Sitzungs-
Handle"
An was kann das liegen ???
Danke für Hinweise und Ideen
Erich
PS. Hier der ganze Schnipsel:
Delphi-Quellcode:
CallBackFrom := uniGUIApplication.UniApplication.parameters.Values[ '
oauth2callback' ];
AzureAuthCode := uniGUIApplication.UniApplication.parameters.Values[ '
code' ];
state := uniGUIApplication.UniApplication.parameters.Values[ '
state' ];
CallBackFrom := uniGUIApplication.UniApplication.parameters.Values[ '
oauth2callback' ];
if ( CallBackFrom = '
azure' )
then
begin
try
try
http := TNetHTTPClient.Create( Self );
params := TStringList.Create;
params.Add( '
code=' + UniMainModule.AzureAuthCode );
params.Add( '
client_id=' + C_client_id_Az );
params.Add( '
client_secret=' + C_client_secret_Az );
params.Add( '
scope=' + C_scope_Az );
params.Add( '
redirect_uri=' + C_redirect_uri_Az );
params.Add( '
grant_type=authorization_code' );
Lresponse := http.post( '
https://login.microsoftonline.com/organizations/oauth2/v2.0/token', params );
if Lresponse.StatusText = '
OK'
then
begin
token := GetSimpleValue( Lresponse.ContentAsString,
'
access_token' );
GToken := stringreplace( token, '
"', '
', [ rfreplaceall ] );;
Lresponse := http.get( '
https://graph.microsoft.com/v1.0/me',
nil,[ TNetHeader.Create( '
Authorization', '
Bearer ' + GToken ) ] );
if Lresponse.StatusText = '
OK'
then
begin
UniMainModule.AUserName := stringreplace( GetSimpleValue( Lresponse.ContentAsString,'
mail' ), '
"', '
', [ rfreplaceall ] );
UniMainModule.LoginType := 2;
end;
end;
Except
on E :
exception do
begin
UniMainModule.LoginType := 0;
UniSession.Log(E.
Message);
end;
end;
finally
http.Free;
params.Free;
end;
end;
function GetSimpleValue( Jstring, key :
string ) :
string;
var
jv, fv : TJSONValue;
begin
Result := '
';
jv := TJSonObject.ParseJSONValue( Jstring );
fv := jv.FindValue( key );
if fv <>
nil
then
Result := fv.ToString;
end;
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \