2017-11-16 5 views
1

에서 괄호를 제거하는 방법 나는 Azure AD B2C에서 얻은 email 주장에서 괄호를 제거하려고합니다.Azure 광고 B2C

사용자 로그인 후 사용자의 토큰을 디코딩하고 그 이메일을받습니다. 그러나 내가 얻는 이메일에는 그것에 괄호가 붙어있다. 전자 메일은 ["[email protected]"]처럼 보이며 데이터베이스에 저장하면 추악 해집니다.

전자 메일 클레임에서 괄호를 제거하는 몇 가지 설정이 있습니까?

JObject ParseIdToken(string idToken) 
{ 
    // Get the piece with actual user info 
    idToken = idToken.Split('.')[1]; 
    idToken = Base64UrlDecode(idToken); 
    return JObject.Parse(idToken); 
} 

private string Base64UrlDecode(string s) 
{ 
    s = s.Replace('-', '+').Replace('_', '/'); 
    s = s.PadRight(s.Length + (4 - s.Length % 4) % 4, '='); 
    var byteArray = Convert.FromBase64String(s); 
    var decoded = Encoding.UTF8.GetString(byteArray, 0, byteArray.Count()); 
    return decoded; 
} 

public void CacheUser(AuthenticationResult ar) 
{ 
    JObject user = ParseIdToken(ar.IdToken); 
    var cache = new CachedUsers 
    { 
     FullName = user["name"]?.ToString(), 
     Email = user["emails"]?.ToString() 

    }; 
    BlobCache.LocalMachine.InsertObject("usercached", cache); 
} 

이메일을받는 것이 내 코드입니다. 이메일에 대괄호가있는 이유는 무엇입니까? 문제는 내 코드에있는 것이 아니라 Azure AD B2C에서 설정 한 것입니다. https://jwt.io/에서 토큰을 해독하려고하면 대괄호가있는 전자 메일이 반환됩니다. 아무도 이것을 경험 한 적이 있습니까? 여기

enter image description here

당신은 이름과 이메일의 차이를 볼 수 있습니다 jwt.io에서 페이로드입니다. 전자 메일에는 [ ]과 같은 대괄호가 있으며 원하는 대괄호를 제거하고 이름을 지정하는 방법을 알고 싶습니다. 왜냐하면 Xamarin 형식의 전자 메일을 받으면 대괄호가 있으므로 [email protected] 대신에 ["[email protected]"]

+0

당신이 말하는 것을 이해하기가 약간 어렵습니다. 샘플 토큰을 공유하고 다른 토큰을 보길 기대할 수 있습니까? – Saca

+0

나는 내 질문을 업데이 트, 당신이 감사합니다 알아낼 수 –

+0

이게 당신이 찾고 있는거야 : user [ "emails"]? FirstOrDefault()? ToString() – Saca

답변

3

JSON에서 대괄호는 배열을 나타냅니다. 이 기본 JSON Arrays 설명서를 참조하십시오.

Azure AD B2C UI를 통해 쉽게 노출되지는 않지만 기술적으로 사용자가 자신의 계정에 여러 개의 이메일을 연결할 수 있습니다. 따라서 이메일 소유권 주장이 배열입니다.

보고있는 문자열이 ["[email protected]"] 인 이유는 JSON 배열에서 .ToString()을 호출했기 때문입니다. 해당 배열의 특정 요소 (예 : 첫 번째 요소)를 얻기 위해 코드를 수정해야합니다.

public void CacheUser(AuthenticationResult ar) 
{ 
    JObject user = ParseIdToken(ar.IdToken); 
    var cache = new CachedUsers 
    { 
     FullName = user["name"]?.ToString(), 
     Email = user["emails"]?.FirstOrDefault()?.ToString() 
    }; 
    BlobCache.LocalMachine.InsertObject("usercached", cache); 
} 
+0

옙 그 작품, 도와 줘서 고마워 :) –