I am using the token authentication (instead of cookie) with Azure Active Directory.
Based on this article: https://www.itunity.com/article/angular-2-openid-connect-azure-active-directory-3093
I was able to get it working on the client side.
public validateSignature(token): Observable<boolean> {
/* Retrieve from federated metadata endpoint.
In this sample, the document was downloaded locally */
return this.httpService.get("metadata/metadata.xml")
.map((res: Response) => {
let dom = (new DOMParser()).parseFromString(res.text(), "text/xml");
let json = xml2json(dom, "");
let cert = "-----BEGIN CERTIFICATE-----" +
JSON.parse(json).EntityDescriptor[0]["ds:Signature"]
["KeyInfo"]["X509Data"]["X509Certificate"] +
"-----END CERTIFICATE-----";
let key = KEYUTIL.getKey(cert);
return KJUR.jws.JWS.verifyJWT(token, key, { alg: ['RS256'] });
})
}
I was trying to re-implement the above method in the .NET Core 1.0.3.
Based on this article: how to sign and verify signature with net and a certificate
The following line won't compile on .NET Core:
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key;
I am not sure what is correct way to verify the token based on the certificate in .NET Core.