mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-24 08:20:31 +08:00
fix: fix several bugs in samlRequest (#3358)
This commit is contained in:
parent
4f3d62520a
commit
3c5985a3c0
@ -26,6 +26,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/beevik/etree"
|
"github.com/beevik/etree"
|
||||||
@ -276,29 +277,38 @@ func GetSamlMeta(application *Application, host string, enablePostBinding bool)
|
|||||||
func GetSamlResponse(application *Application, user *User, samlRequest string, host string) (string, string, string, error) {
|
func GetSamlResponse(application *Application, user *User, samlRequest string, host string) (string, string, string, error) {
|
||||||
// request type
|
// request type
|
||||||
method := "GET"
|
method := "GET"
|
||||||
|
samlRequest = strings.ReplaceAll(samlRequest, " ", "+")
|
||||||
// base64 decode
|
// base64 decode
|
||||||
defated, err := base64.StdEncoding.DecodeString(samlRequest)
|
defated, err := base64.StdEncoding.DecodeString(samlRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", "", fmt.Errorf("err: Failed to decode SAML request, %s", err.Error())
|
return "", "", "", fmt.Errorf("err: Failed to decode SAML request, %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// decompress
|
var requestByte []byte
|
||||||
var buffer bytes.Buffer
|
|
||||||
rdr := flate.NewReader(bytes.NewReader(defated))
|
|
||||||
|
|
||||||
for {
|
if strings.Contains(string(defated), "xmlns:") {
|
||||||
_, err = io.CopyN(&buffer, rdr, 1024)
|
requestByte = defated
|
||||||
if err != nil {
|
} else {
|
||||||
if err == io.EOF {
|
// decompress
|
||||||
break
|
var buffer bytes.Buffer
|
||||||
|
rdr := flate.NewReader(bytes.NewReader(defated))
|
||||||
|
|
||||||
|
for {
|
||||||
|
|
||||||
|
_, err = io.CopyN(&buffer, rdr, 1024)
|
||||||
|
if err != nil {
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return "", "", "", err
|
||||||
}
|
}
|
||||||
return "", "", "", err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
requestByte = buffer.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
var authnRequest saml.AuthNRequest
|
var authnRequest saml.AuthNRequest
|
||||||
err = xml.Unmarshal(buffer.Bytes(), &authnRequest)
|
err = xml.Unmarshal(requestByte, &authnRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", "", fmt.Errorf("err: Failed to unmarshal AuthnRequest, please check the SAML request, %s", err.Error())
|
return "", "", "", fmt.Errorf("err: Failed to unmarshal AuthnRequest, please check the SAML request, %s", err.Error())
|
||||||
}
|
}
|
||||||
|
@ -113,6 +113,9 @@ export function getCasLoginParameters(owner, name) {
|
|||||||
|
|
||||||
export function getOAuthGetParameters(params) {
|
export function getOAuthGetParameters(params) {
|
||||||
const queries = (params !== undefined) ? params : new URLSearchParams(window.location.search);
|
const queries = (params !== undefined) ? params : new URLSearchParams(window.location.search);
|
||||||
|
const lowercaseQueries = {};
|
||||||
|
queries.forEach((val, key) => {lowercaseQueries[key.toLowerCase()] = val;});
|
||||||
|
|
||||||
const clientId = getRefinedValue(queries.get("client_id"));
|
const clientId = getRefinedValue(queries.get("client_id"));
|
||||||
const responseType = getRefinedValue(queries.get("response_type"));
|
const responseType = getRefinedValue(queries.get("response_type"));
|
||||||
|
|
||||||
@ -138,9 +141,9 @@ export function getOAuthGetParameters(params) {
|
|||||||
const nonce = getRefinedValue(queries.get("nonce"));
|
const nonce = getRefinedValue(queries.get("nonce"));
|
||||||
const challengeMethod = getRefinedValue(queries.get("code_challenge_method"));
|
const challengeMethod = getRefinedValue(queries.get("code_challenge_method"));
|
||||||
const codeChallenge = getRefinedValue(queries.get("code_challenge"));
|
const codeChallenge = getRefinedValue(queries.get("code_challenge"));
|
||||||
const samlRequest = getRefinedValue(queries.get("SAMLRequest"));
|
const samlRequest = getRefinedValue(lowercaseQueries["samlRequest".toLowerCase()]);
|
||||||
const relayState = getRefinedValue(queries.get("RelayState"));
|
const relayState = getRefinedValue(lowercaseQueries["RelayState".toLowerCase()]);
|
||||||
const noRedirect = getRefinedValue(queries.get("noRedirect"));
|
const noRedirect = getRefinedValue(lowercaseQueries["noRedirect".toLowerCase()]);
|
||||||
|
|
||||||
if (clientId === "" && samlRequest === "") {
|
if (clientId === "" && samlRequest === "") {
|
||||||
// login
|
// login
|
||||||
|
Loading…
x
Reference in New Issue
Block a user